C++ STL 容器的一些总结 --- set(multiset)和map(multimap)

1 set和multiset

1.1 插入元素方式

set只能用insert插入数据. insert返回值是一个pair, 即插入数据的迭代器以及是否插入成功, 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 tSet;
    int array[] = {7,5,2,9,8,4,0,1,3,6};
    TestUtils::getInstance()->getSetOrMultisetByArr(tSet, PARAM_ARRAY(array));
    TestUtils::getInstance()->showContainerElements::iterator>(tSet);
}

结果是:

如果想要修改set(multiset)/map(multimap), 只能在 初始化容器的过程中, 尖括号中传入排序规则, 且这个排序规则只能传入重载了括号运算符的结构体或者类.

2 map与multimap

2.1 通过key值插入

如以下例子:

void mapInsertTest() {
    map mMap;
    mMap.insert({0, "a"});
    mMap.insert({1, "b"});
    mMap.insert({2, "c"});
    TestUtils::getInstance()->showMapOrMultimapElements::iterator>(mMap);
    mMap[8] = "ok";
    TestUtils::getInstance()->showMapOrMultimapElements::iterator>(mMap);
    cout << "mMap[10] = "<< mMap[10] << endl;
}

结果如下:

也就是说当用map[键值](键值此时不存在)访问value时, 会插入一个对应键值的pair, value值为空, 或者是0;

你可能感兴趣的:(C++基础,stl,c++,数据结构)