C++ Multimap
因为所看书中涉及到multimap的一些知识点,但是还没有学到,所以总结了网上的文章,帮助自己理解程序。
特点
Map:一对一;有序( 自动按 key 升序 );可用 [ ] 赋值和取值;采用 红黑树 结构;实现O(lgn)的查找,插入和删除。
Mulitimap:多对多;有序( 自动按 key 升序 );无[ ] 操作;可自定义排序函数;采用 红黑树 结构。
multimap<char, int, less< char> >
less< char>为默认函数,较小的放在前面 ,即升序排序。
multimap<char, int, greater< char> >
greater< char> 为系统函数 ,较大的放在前面, 即降序排序,可传入自定义排序函数。
使用
#include <map>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
multimap<int, string> multimap1;
multimap1.insert(multimap<int, string>::value_type(1, "One"));
multimap1.insert(multimap<int, string>::value_type(1, "One"));
multimap1.insert(multimap<int, string>::value_type(2, "Two"));
multimap1.insert(pair<int, string>(1, "Test1"));
multimap1.insert(pair<int, string>(2, "Test2"));
multimap1.insert(make_pair<int, string>(3, "Test3"));
cout << "multimap size:" << multimap1.size() << endl;
multimap<int, string>::const_iterator multimap_iter;
for (multimap_iter = multimap1.begin(); multimap_iter != multimap1.end(); ++multimap_iter)
{
cout << "key:" << multimap_iter->first << " value:" << multimap_iter->second.c_str() << endl;
}
}
/*运行结果:
multimap size:6
key:1 value:One
key:1 value:One
key:1 value:Test1
key:2 value:Two
key:2 value:Test2
key:3 value:Test3
*/
说明1:
map容器的迭代器里面有个first 和 second。例如:
map<string, int> m;
m["one"] = 1;
map<string, int>::iterator p = m.begin();
p->first; // 这个是 string 值是 “one”
p->second; //这个是 int 值是 1
说明2:
每个STL中的类都有value_type,通俗的说value_type 就是STL容器盛装的数据的数据类型,例如:
vector vec;
vector::value_type x;
上述两句代码,第一句是声明一个盛装数据类型是int的数据的vector,第二句是使用vector::value_type定义一个变量x,这个变量x实际上是int类型的,因为vector::value_type中声明的为int型。