c++中set和multiset容器的区别和用法

当需要使用greater<int>时,在头文件里需要添加#include<functional>

  1. #include<iostream>

  2. #include<vector>

  3. #include<set>

  4. #include <functional>

  5.  
  6. using namespace std;

  7.  
  8. int main()

  9. {

  10. vector<int> data{1,4,3,8};

  11. //vector<int> d1(data.begin()+1, data.begin() + 3);

  12. multiset<int, greater<int> > test;

  13. for (int i = 0; i < data.size(); i++)

  14. {

  15. test.insert(data[i]);

  16. }

  17. return 0;

  18. }


得到test的结果为 8,4,3,1。

所以,添加greater<int> 会使得排序为降序排序。即更大的在前面。

一般不加第二个参数,会默认为是less<int>,即按升序排序。

 

注意:multiset和set会对插入的元素进行自动排序,比如下面我使用set将0,10,8,9, 1, 5, 2插入,然后打印set,看出来的结果是,这说明set会对插入其中的元素进行自动排好序。

程序:

#include<iostream>
#include<set>
#include<vector>
#include<functional>
using namespace std;

int main()
{
    vector<int>input_data1 = { 0,10,8,9,1,5,2};
    set<int, greater<int>>save1;

    vector<int>input_data2{0,1,1,10,10,7,6,9,11,2};
    multiset<int, greater<int>>save2;

    for (vector<int>::iterator it = input_data1.begin(); it != input_data1.end(); it++)
        save1.insert(*it);
    for (set<int, greater<int>>::iterator it = save1.begin(); it != save1.end(); ++it)
        cout << *it << " ";
    cout << endl;

    for (vector<int>::iterator it = input_data2.begin(); it != input_data2.end(); it++)
        save2.insert(*it);
    for (set<int, greater<int>>::iterator it = save2.begin(); it != save2.end(); ++it)
        cout << *it << " ";
    cout << endl;
    system("pause");
    return 0;
}
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
multisetC++标准库的一个容器,它是一个有序的集合,允许重复的元素存在。它在头文件<set>定义。 multiset容器用法如下: 1. 创建multiset对象: ```cpp std::multiset<int> mySet; ``` 2. 插入元素: 使用insert()函数向multiset插入元素。由于multiset允许重复的元素存在,因此可以插入相同的元素。 ```cpp mySet.insert(10); mySet.insert(20); mySet.insert(10); ``` 3. 遍历multiset: 可以使用迭代器来遍历multiset的元素。 ```cpp for(auto it = mySet.begin(); it != mySet.end(); ++it) { std::cout << *it << " "; } ``` 4. 查找元素: 使用find()函数可以查找multiset的元素。如果找到了指定的元素,则返回指向该元素的迭代器;如果没找到,则返回end()迭代器。 ```cpp auto it = mySet.find(20); if(it != mySet.end()) { std::cout << "Found: " << *it << std::endl; } else { std::cout << "Not found" << std::endl; } ``` 5. 删除元素: 使用erase()函数可以删除multiset的元素。可以删除指定值的元素,也可以删除指定位置的元素。 ```cpp mySet.erase(10); // 删除所有值为10的元素 auto it = mySet.find(20); if(it != mySet.end()) { mySet.erase(it); // 删除指定位置的元素 } ``` multiset容器的特点是它的元素会根据特定的排序规则进行自动排序,因此在插入和删除元素时会有一定的性能开销。但是它提供了高效的查找操作,适用于需要有序且允许重复元素的场景。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸡啄米的时光机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值