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

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值