1 set和multiset
1.1 插入元素方式
set只能用insert插入数据. insert返回值是一个pair<iterator, bool>, 即插入数据的迭代器以及是否插入成功, multiset返回的只有迭代器, 因为不会插入失败.
1.2 删除
set只能用erase, 可以传迭代器或者是值.
1.3 注意事项
- 不允许resize()
- 可以用swap()
1.4 find和count
find返回容器中值为参数的元素的迭代器, 如果没找到, 会返回容器的end;
count会返回容器中值为参数的元素的个数, 只能为0或者1;
1.5 修改set容器排序规则
如下测试代码:
struct moreCompare {bool operator()(int first, int second) {return first > second;}
};void modifySetOrderRulesTest() {set<int, moreCompare> tSet;int array[] = {7,5,2,9,8,4,0,1,3,6};TestUtils::getInstance()->getSetOrMultisetByArr(tSet, PARAM_ARRAY(array));TestUtils::getInstance()->showContainerElements<set<int>::iterator>(tSet);
}
结果是:
如果想要修改set(multiset)/map(multimap), 只能在 初始化容器的过程中, 尖括号中传入排序规则, 且这个排序规则只能传入重载了括号运算符的结构体或者类.
2 map与multimap
2.1 通过key值插入
如以下例子:
void mapInsertTest() {map<int, string> mMap;mMap.insert({0, "a"});mMap.insert({1, "b"});mMap.insert({2, "c"});TestUtils::getInstance()->showMapOrMultimapElements<map<int, string>::iterator>(mMap);mMap[8] = "ok";TestUtils::getInstance()->showMapOrMultimapElements<map<int, string>::iterator>(mMap);cout << "mMap[10] = "<< mMap[10] << endl;
}
结果如下:
也就是说当用map[键值](键值此时不存在)访问value时, 会插入一个对应键值的pair, value值为空, 或者是0;