map, set, multimap, multiset 四种容器采用红黑树实现,红黑树是平衡二叉树的一种。不同操作的时间复杂度近似为:
插入: O(logN)
查询:O(logN)
删除:O(logN)
map 更多
C++ maps是一种关联式容器,包含“关键字/值”对。
map的基本操作函数:
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
例子
1.遍历map
#include <iostream>
#include <map>
using namespace std;
int main() {
map<int, int> _map;
_map[0] = 1;
_map[1] = 2;
_map[10] = 10;
map<int, int>::iterator iter;
iter = _map.begin();
while(iter != _map.end()) {
cout << iter->first << " : " << iter->second << endl;
iter++; //注意这里
}
// 也可以使用for循环遍历
/*
for(iter = _map.begin(); iter != _map.end(); iter++) {
cout << iter->first << " : " << iter->second << endl;
}
*/
return 0;
}
2.查找
std::map<char,int> mymap;
std::map<char,int>::iterator it;
mymap['a']=50;
mymap['b']=100;
mymap['c']=150;
mymap['d']=200;
it = mymap.find('b');
if (it != mymap.end())
mymap.erase (it); // b被成功删除
3.插入值
map<int, string> ID_Name;
// 如果已经存在键值2015,则会作赋值修改操作,如果没有则插入
ID_Name[2015] = "Tom";
4.遍历队列,统计队列中元素的个数
void PrintQueueAndCount(queue<int> &q){
map<int, int> result;
while(!q.empty()){
result[q.front()]++; //注意这个用法
q.pop();
}
map<int, int>::iterator iter;
iter = result.begin();
while(iter != result.end()){
cout<<iter->first<<" : "<<iter->second<<endl;
iter++;
}
}

本文介绍了C++ STL中的两种有序容器——map和set,它们基于红黑树数据结构。map用于存储键值对,提供了包括遍历、查找和插入等基本操作。set则用于存储唯一元素,同样支持高效的操作。文章通过实例展示了如何使用这些容器。
607

被折叠的 条评论
为什么被折叠?



