C++ multiset的一些探索

偶然遇见平时不常用的一个容器multiset。直接上代码:

#include "stdafx.h"
#include
#include
using namespace std;

template
using mset = multiset;

int main()
{
	mset set = {1,2,3,2,3};
	set.insert(1);
	for (auto i : set)
	{
		cout << i << " ";
	}

    return 0;
}

运行结果:

C++ multiset的一些探索_第1张图片

代码简单易懂,这玩意儿和set差不多,但是多了一个能添加重复的元素。初始化,迭代器,插入方式的什么的和set基本相同,都是基于红黑树blabla的。

而且也能自定义排序,这个以前没有注意过,今天试了一下如何自定义排序。

直接上代码:

#include "stdafx.h"
#include
#include
using namespace std;

template
using mset = multiset;

template
struct op
{
	bool operator()(const T& x, const T&y){
		return x > y;
	}
};

int main()
{
	mset> set = { 1,2,3,2,3 };
	set.insert(1);
	for (auto i : set)
	{
		cout << i << " ";
	}

	return 0;
}

代码也简单易懂,简单说一下:就是定义一个结构体,其中重载()运算符并返回bool就可以了。然后声明multiset时,第二个模板参数填上去就可以了。

基本的用法先写上,以后用到哪些细节再补充,告辞!

-----------------------------------------------------------PS分割线----------------------------------------------------------------------

PS1.顺道发现map,multimap也可以这样自定义排序方法。你猜map和multimap的关系与set和multiset的关系是不是类似?

PS2.引入,会有一些STL自带的比较函数,例如greater、less....

如下所示:

C++ multiset的一些探索_第2张图片

这里greater就是降序排序,less是升序排序。

PS3.我就是随手一试,没想到using 别名=类型名这样也可以模板编程。get,比心。

告辞。

你可能感兴趣的:(C++,学习,程序)