set与multset的区别;less greater 函数对象实现比较 作为排序依据

发布于:2025-09-08 ⋅ 阅读:(22) ⋅ 点赞:(0)

Set 和 multiset 特点

  1. set中元素插入过程是按排序规则插入,所以不能指定插入位置。
  2. set不可以直接存取元素。(不可以使用at.(pos)与[]操作符)。
  3. multiset与set的区别:set支持唯一键值,每个元素值只能出现一次;而multiset中同一值可以出现多次。
  4. 不可以直接修改set或multiset容器中的元素值,因为该类容器是自动排序的。如果希望修改一个元素值,必须先删除原有的元素,再插入新的元素
  5. 头文件
#include <set>
using namespace std; //set容器在命名空间std中 

参考程序如下:

#include <iostream>
#include <functional>
#include <algorithm>
#include <set>

using namespace std;

//set与multset的主要区别
void demo() {
	set<int> sInt;
	multiset<int> mInt;

	for (int i = 0; i < 10; i++) {
		sInt.insert(100 - i);
		mInt.insert(100 - i);
	}

	//sInt.insert(99); //set无法插入相同元素
	//multiset支持插入多个相同元素
	mInt.insert(99);



	set<int>::iterator it = sInt.begin();
	for (; it != sInt.end(); it++) {
		cout << *it << "  ";
	}
	cout << endl;

	multiset<int>::iterator itm = mInt.begin();
	for (; itm != mInt.end(); itm++) {
		cout << *itm << "  ";
	}
	cout << endl;
}

//less greater 函数对象实现比较  作为排序依据
void demo1(){
	cout << endl << "less<> greater<> 函数对象实现比较  作为排序依据" << endl;
	
	//set<  ,less< >> 无论输入的数据是从小到大还是输入的数据是从大到小
	//都从小到大遍历出来   set<int>默认情况下set<int, less<int>>
	set<int, less<int>>st1;

	for (int i = 10; i > 0; i--) {
		st1.insert(i * 10 + 1);
	}

	
	set<int, less<int>>::iterator itl = st1.begin();
	for (; itl != st1.end(); itl++) {
		cout << *itl << "  ";
	}
	cout << endl;

	//set<  ,greater< >> 无论输入的数据是从小到大还是输入的数据是从大到小
	//都从大到小遍历出来
	set<int, greater<int>>stg;

	for (int i = 1; i <10; i++) {
		stg.insert(i * 10 + 1);
	}

	set<int, greater<int>>::iterator itg = stg.begin();
	for (; itg != stg.end(); itg++) {
		cout << *itg << "  ";
	}
	cout << endl;
}

int main() {
	
	demo();


	demo1();
	

	system("pause");
	return 0;
}

本质set / setmulti容器就是调用函数对象的operator()方法去比较两个值的大小。


网站公告

今日签到

点亮在社区的每一天
去签到