关联型容器使用中一些注意的地方
- 主要有map与set,衍生出unordered与multi版本的
map
- map中每个元素都是一个
[key,value]
的pair对象,可以通过first与second访问key和value,在操作的时候,可以对value进行修改,但是不能对key进行修改。
multiset/multimap
- 对于map与set,其中没有重复元素,因此可以通过find直接判断容器中是否包含特定元素
- 对于multimap与multiset,相同的元素会被保存在相邻的位置,因此找到第一个位置,就可以依次找出之后存储的值
code
void test() { multimap<int, string> maps; maps.insert( make_pair(1, "a") ); maps.insert(make_pair(1, "b")); maps.insert(make_pair(2, "d")); maps.insert(make_pair(1, "c")); maps.insert(make_pair(3, "e")); int cnt = maps.count( 1 ); auto it = maps.find( 1 ); while (cnt-- != 0) cout << it++->second << endl; }
lower_bound,upper_bound
lower_bound
是返回第一个大于或者等于特定元素所在的容器位置的迭代器upper_bound
是返回第一个大于特定元素所在的容器位置的迭代器- 上面2个函数也可以用于找出(有序)容器中等于特定元素的那些值
- 对于set类别的容器,可以使用泛型算法或者自己实现的函数实现lower_bound/upper_bound,但是对于map类别的容器,建议使用map类实现的函数;如果想用stl的泛型算法实现lower_bound/upper_bound,则需要给出pair
无序容器
- unordered开头的那些类,用哈希表实现,可以实现
O(1)
的查找。