C++ --STL之set和multiset容器

C++ --STL之set和multiset容器,第1张

文章目录
  • set和multiset容器

  • 一、set容器构造,赋值,交换,大小


  • 二、set容器插入和删除


  • 三、set容器查找和统计


  • 四、set和multiset的区别

    • 4.1 pair对组的创建

  • 五、改变set容器默认排序规则

set和multiset容器
  • set中的元素会自动排序,底层是一个二叉树
  • set中不允许有相同的元素,multiset中允许有相同的元素

一、set容器构造,赋值,交换,大小

operator=
swap
size, empty

//set容器构造,赋值和交换,大小,
//operator=, swap, size, empty
#include 
void traversingSet(set<int>& s)
{
	for (set<int>::iterator it = s.begin(); it != s.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}
void test()
{
	set<int> s1;					//默认构造
	s1.insert(33);
	s1.insert(18);
	s1.insert(999);
	s1.insert(18);
	s1.insert(26);
	traversingSet(s1);
	set<int> s2(s1);				//拷贝构造
	set<int> s3 = s1;				//operator= 赋值
	s3.insert(88);
	traversingSet(s2);
	traversingSet(s3);
	s2.swap(s3);
	traversingSet(s2);
	traversingSet(s3);
}
int main()
{
	test();
	return 0;
}

二、set容器插入和删除

  • insert
  • erase, clear
//set容器插入和删除
//insert, erase, clear
#include 
void traversingSet(set<int>& s)
{
	for (set<int>::iterator it = s.begin(); it != s.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}
void test()
{
	set<int> s1;
	s1.insert(20);
	s1.insert(30);
	s1.insert(10);
	s1.insert(50);
	traversingSet(s1);
	s1.erase(s1.begin());
	traversingSet(s1);
	s1.erase(20);
	traversingSet(s1);
	s1.insert(40);
	s1.erase(s1.begin(), --s1.end());
	traversingSet(s1);
	s1.clear();
}
int main()
{
	test();
	return 0;
}

三、set容器查找和统计

  • find
  • count
//set容器的查找和统计:find, count
#include 
void test()
{
	set<int> s1;
	s1.insert(1);
	s1.insert(20);
	s1.insert(8);
	set<int>::iterator rit = s1.find(8);				//find返回值是iterator,如果没找到哦则返回 end();
	if (rit == s1.end())
	{
		cout << "8不在set中" << endl;
	}
	else
	{
		cout << "8在set中" << endl;
	}
	cout << s1.count(9) << endl;
}
int main()
{
	test();
	return 0;
}

四、set和multiset的区别

//set和multiset的区别
//set不允许插入重复的element,插入element时会进行检测,返回值是一个pair;multiset可以插入重复的element,返回值是一个iterator
#include 
void test()
{
	set<int> s;
	pair<set<int>::iterator, bool> pa = s.insert(20);
	
	cout << pa.second << endl;
	pa = s.insert(20);
	cout << pa.second << endl;;
}
int main()
{
	test();
	return 0;
}
4.1 pair对组的创建
//pair对组的创建
// pair:成对的两个数据
//两种方法:有参构造和make_pair方法
void test()
{
	pair<string, string> xwp("肖维鹏", "帅的一");
	pair<string, string> yjj = make_pair("杨俊杰", "叼的一");
	cout << "姓名:" << xwp.first << " " << xwp.second << endl;
	cout << "姓名:" << yjj.first << " " << yjj.second << endl;
}
int main()
{
	test();
	return 0;
}

五、改变set容器默认排序规则

//利用仿函数改变set容器默认排序规则
#include 
void traversingSet(set<int>& s)
{
	for (set<int>::iterator it = s.begin(); it != s.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}
class reverseSort			//仿函数
{
public:
	//reverseSort() {}
	bool operator()(int v1, int v2) const				//重载operator=
	{
		return v1 > v2;
	}
};
void test()
{
	//默认排序规则
	set<int> s1;
	s1.insert(10);
	s1.insert(30);
	s1.insert(20);
	s1.insert(40);
	traversingSet(s1);
	//修改排序规则后
	set<int, reverseSort> s2;
	s2.insert(10);
	s2.insert(30);
	s2.insert(20);
	s2.insert(40);
	for (set<int, reverseSort>::iterator sit = s2.begin(); sit != s2.end(); sit++)
	{
		cout << *sit << " ";
	}
	cout << endl;
}
int main()
{
	test();
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/578155.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存