1有序关联容器
map,multimap,set,multiset都要求按照关键字排序:
1.1map
std::map<int, int>map_a;
map_a.emplace(5, 2);
map_a.emplace(3, 2);
map_a.emplace(1, 1);
map_a.insert(std::pair<int,int>(2, 2));
map_a.insert(std::make_pair(7, 6));
//map_a.insert(std::make_pair(7, 1));
for (auto m : map_a)
{
std::cout << m.first<<" "<<m.second << std::endl;
}
结果:
1.2multimap
std::multimap<int, int>map_a;
map_a.emplace(5, 2);
map_a.emplace(3, 2);
map_a.emplace(1, 1);
map_a.insert(std::pair<int,int>(2, 2));
map_a.insert(std::make_pair(7, 6));
map_a.insert(std::make_pair(7, 1));
for (auto m : map_a)
{
std::cout << m.first<<" "<<m.second << std::endl;
}
结果:
2无序关联容器
2.1unordered_map
第一个实验
//std::map<int, int>map_a;
std::unordered_map<int, int>map_a;
//std::multimap<int, int>map_a;
map_a.emplace(5, 2);
map_a.emplace(3, 2);
map_a.emplace(1, 1);
map_a.insert(std::pair<int,int>(2, 2));
map_a.insert(std::make_pair(7, 6));
//map_a.insert(std::make_pair(7, 1));
for (auto m : map_a)
{
std::cout << m.first<<" "<<m.second << std::endl;
}
结果:排列顺序和插入顺序一致
第二次实验
unordered_map<int, std::string> m1;
m1[5] = "lamb";
m1[2] = "had";
m1[3] = "a";
m1[1] = "mary";
m1[4] = "little";
m1[7] = "fleece";
m1[6] = "whose";
m1[10] = "fleecey";
m1[8] = "was";
m1[9] = "all";
for (auto it = m1.begin(); it != m1.end(); ++it)
{
cout << it->first << " "
<<it->second << endl;
}
结果:排列顺序和插入顺序不一致
3总结
(1)有序关联容器内部实现一般是红黑树,一定会按照关键字(key)排序,关键字要提供<(小于)操作。如果key使用自定义类,需要重载operator<运算符
(2)无序容器内部实现一般是哈希表,不按照关键词排序,但是其内存储存顺序和插入顺序也可能不一致。
(3)只要是关联容器其插入顺序和储存顺序都会不一样,关联容器不能保证插入顺序和储存顺序一致性(即使是unordered系列也不行),如果想要保持一致性请使用顺序容器。
版权声明:本文为xinxiangwangzhi_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。