我是靠谱客的博主 和谐奇迹,最近开发中收集的这篇文章主要介绍黑马程序员C++提高9——set/multiset容器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在这里插入图片描述

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

//输出
void PrintSet(set<int> s) {
	for (set<int>::iterator it = s.begin(); it != s.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
}

//初始化、赋值、插入、删除
void test01() {

	//初始化和插入
	set<int> s1;		//默认构造
	//默认从小到大排序
	s1.insert(50);
	s1.insert(10);
	s1.insert(30);
	s1.insert(90);
	s1.insert(60);
	s1.insert(20);
	set<int> s2(s1);	//拷贝构造
	cout << "s2:";
	PrintSet(s2);

	//赋值
	set<int> s3;
	s3.insert(5);
	s3.insert(2);
	s3.insert(3);
	set<int> s4;
	s4 = s3;
	cout << "ns4:";
	PrintSet(s4);
	s4.swap(s2);
	cout << "n------swap------" << endl;
	cout << "s2:";
	PrintSet(s2);
	cout << "ns4:";
	PrintSet(s4);

	//大小
	if (s4.empty()) {
		cout << "nns4为空。" << endl;
	}
	else {
		cout << "nns4不为空且size=" << s4.size() << endl;
	}

	//删除
	s2.erase(s2.begin());
	cout << "ns2删除s2.begin()处的元素后:";
	PrintSet(s2);
	s4.erase(50);
	cout << "ns4删除元素50后:";
	PrintSet(s4);
}

//查找操作
void test02() {

	set<int> s;
	//默认从小到大排序
	s.insert(50);
	s.insert(10);
	s.insert(30);
	s.insert(90);
	s.insert(60);
	cout << "s: ";
	PrintSet(s);
	//找到指定值key的位置【位置用迭代器表示】
	set<int>::iterator ret = s.find(30);
	if (ret == s.end()) {
		cout << "没有找到!" << endl;
	}
	else {
		cout << "指定值ret:" << *ret << endl;
	}

	//找第一个>=key的元素位置
	ret = s.lower_bound(30);
	if (ret == s.end()) {
		cout << "没有找到!" << endl;
	}
	else {
		cout << "第一个>=30的元素ret:" << *ret << endl;
	}

	//找到第一个>key的元素位置
	ret = s.upper_bound(30);
	if (ret == s.end()) {
		cout << "没有找到!" << endl;
	}
	else {
		cout << "第一个>30的元素ret:" << *ret << endl;
	}
	
	//equal_range是返回lower_bound和upper_bound的值
	pair<set<int>::iterator, set<int>::iterator> myret = s.equal_range(30);
	if (myret.first == s.end()) {
		cout << "没有找到!" << endl;
	}
	else {
		cout << "myret.first=" << *(myret.first) << endl;
	}
	if (myret.second == s.end()) {
		cout << "没有找到!" << endl;
	}
	else {
		cout << "myret.second=" << *(myret.second) << endl;
	}
}

//自定义类
class Person {
public:
	Person(int id, int age):id(id), age(age){}
public:
	int id;
	int age;
};
//仿函数
class mycompare {
public:
	bool operator()(Person p1, Person p2) const {
		return p1.age < p2.age;
	}
};
//set采用自定义规则排序
void test03() {

	set<Person, mycompare> sp;
	Person p1(1, 26), p2(2, 21), p3(3, 19);
	sp.insert(p1);
	sp.insert(p2);
	sp.insert(p3);

	for (set<Person, mycompare>::iterator it = sp.begin(); it != sp.end(); it++)
		cout << "id:" << it->id << "tage:" << it->age << endl;

	//查找【由于排序时只看了age,查找时也只看age】
	Person p4(4, 26);
	cout << "要查找的id:4	age:26" << endl;
	set<Person, mycompare>::iterator ret = sp.find(p4);
	if (ret == sp.end())
		cout << "没有找到!" << endl;
	else
		cout << "查找到的id:" << ret->id << "tage:" << ret->age << endl;
	//正常情况下是无法查到p4的,但是由于只看age,所以查到了与p4由相同age的p1
}

//简单测试
int main() {
	//test01();
	//test02();
	test03();

	cout << endl << endl;
	return 0;
}

最后

以上就是和谐奇迹为你收集整理的黑马程序员C++提高9——set/multiset容器的全部内容,希望文章能够帮你解决黑马程序员C++提高9——set/multiset容器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部