map中的insert函数
时间: 2023-05-27 09:02:54 浏览: 94
深入了解C++中map用法
1. 描述
`insert`函数是`map`容器的一个成员函数,用于插入元素到`map`中。它的主要功能是将一个键值对(key-value)插入到`map`中,如果这个键已经存在,它将不会插入,同时返回一个`pair`对象,其中第一个元素为一个指向已有元素的迭代器,第二个元素为`false`;否则会成功插入,返回一个`pair`对象,其中第一个元素为一个指向新插入元素的迭代器,第二个元素为`true`。
2. 语法
`insert`函数有多种语法:
```cpp
// 在map中插入一个键值对,或者一组键值对
pair<iterator, bool> insert(const pair<const key_type, mapped_type>& value);
iterator insert(const_iterator hint, const pair<const key_type, mapped_type>& value);
template< class InputIt >
void insert( InputIt first, InputIt last );
void insert( initializer_list<value_type> ilist );
// 在map中插入一个元素,使用rvalue-reference形式
pair<iterator,bool> insert(value_type&& value);
iterator insert(const_iterator hint, value_type&& value);
```
- `value`:表示要插入的键值对。
- `first`、`last`:表示一个区间,其中包含了要插入的一组键值对。
- `ilist`:表示一个`std::initializer_list`类型的值,其中为多组键值对。
- `hint`:表示一个迭代器,指向插入位置的一个合理推测。这样做的好处是可以将插入速度提升到log(n)级别。
3. 示例
例如,我们要向一个`map`中插入一组键值对:
```cpp
map<char, int> m;
m.insert(pair<char, int>('a', 1));
m.insert(pair<char, int>('b', 2));
// 或者简单点,使用make_pair函数
m.insert(make_pair('c', 3));
```
或者,我们可以用一个区间插入一组键值对:
```cpp
map<char, int> m;
vector<pair<char, int>> v = {{'a', 1}, {'b', 2}, {'c', 3}};
m.insert(v.begin(), v.end());
```
或者,我们也可以使用初始化列表插入键值对:
```cpp
map<char, int> m {{'a', 1}, {'b', 2}, {'c', 3}};
```
最后,我们来看一个使用迭代器提示的示例代码:
```cpp
map<int, string> m {{1, "one"}, {2, "two"}};
auto result = m.insert(m.end(), pair<int, string>(3, "three")); //指定提示位置
if (result.second) {
cout << "Insert successfully!" << endl;
} else {
cout << "Insert failed!" << endl;
}
result = m.insert(m.end(), pair<int, string>(2, "two")); //已存在相同key
if (result.second) {
cout << "Insert successfully!" << endl;
} else {
cout << "Insert failed!" << endl;
}
```
输出结果:
```
Insert successfully!
Insert failed!
```
阅读全文