本篇学习multimap插入数据相关的操作,具体的操作函数如下
插入元素或结点 (C++17 起) (公开成员函数) | |
(C++11) | 原位构造元素 (公开成员函数) |
(C++11) | 使用提示原位构造元素 (公开成员函数) |
#include <map>
#include <string>
#include <time.h>
#include <iostream>
using namespace std;
void insertOperator()
{
multimap<int, string> multimap1;
//1.insert 插入元素或结点
multimap1.insert({1, "hello"});
auto map1it = multimap1.begin();
multimap1.insert(map1it, {7, "333333"});
multimap1.insert(pair<int, string>(3, "scott"));
multimap1.insert(pair(2, "C++17 wirte"));//C++17 的写法s
multimap1.insert({1, "world"});
cout << "multimap1.size = " << multimap1.size() << " multimap1.max_size = " << multimap1.max_size() << endl;
auto iter1 = multimap1.begin();
cout << "multimap1 of value: " << endl;
while (iter1 != multimap1.end())
{
cout << iter1->first << ": " << iter1->second << endl;
iter1++;
}
//2..emplace原位构造元素
multimap<int, string> multimap2;
multimap2.emplace(11, "emplace aaaaa");
multimap2.emplace(11, "emplace bbbbb");
multimap2.emplace(pair(12, "emplace ccccc"));
auto pair1 = multimap2.emplace(pair{13, "emplace ddddd"});
//返回一个pair<iterator, bool>
cout << "iterator->first:" << pair1->first << " second: " << pair1->second << endl;
cout << "map2.size = " << multimap2.size() << " multimap2.max_size = " << multimap2.max_size() << endl;
auto map2it = multimap2.begin();
while(map2it != multimap2.end())
{
cout << map2it->first << ": " << map2it->second << endl;
++map2it;
}
cout << "---------------------------------" << endl;
//3.emplace_hint使用提示原位构造元素
multimap<int, string> multimap3;
auto map3it = multimap3.begin();
//返回一个迭代器
auto map3Hint1 = multimap3.emplace_hint(map3it, 23, "emplace_hint aaaaa");
multimap3.emplace_hint(map3it, 21, "emplace_hint bbbbbb");
auto map3Hint2 = multimap3.emplace_hint(map3it, 21, "emplace_hint cccccc");
multimap<int, string>::iterator map3it2 = multimap3.begin();
while(map3it2 != multimap3.end())
{
cout << map3it2->first << ": " << map3it2->second << endl;
++map3it2;
}
cout << "emplace_hint1 " << map3Hint1->first << ": " << map3Hint1->second << endl;
cout << "emplace_hint2 " << map3Hint2->first << ": " << map3Hint2->second << endl;
//插入时间对比
int count = 1000000;
multimap<int, string> multimap4;
double startTime1 = clock();//1计算开始
for(int i = 0; i < count; i++)//214748
{
multimap4.emplace(pair{i, "hello"});
}
double endTime1 = clock();//1时间结束
multimap4.clear();
cout << "for 1 run time is: " << (double)(endTime1 - startTime1) / CLOCKS_PER_SEC << "s" << endl;
cout << endl;
multimap<int, string> multimap5;
double startTime2 = clock();//1计算开始
for(int i = 0; i < count; i++)//214748
{
multimap5.insert(pair{i, "hello"});
}
double endTime2 = clock();//1时间结束
multimap5.clear();
cout << "for 2 run time is: " << (double)(endTime2 - startTime2) / CLOCKS_PER_SEC << "s" << endl;
cout << endl;
}
int main()
{
insertOperator();
return 0;
}
运行结果:
参考: