欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

set

程序员文章站 2024-03-22 13:38:40
...

set
set
multiset
set
序列式怎么插入的怎么输出,关联式会排序,从小到大

void test1()
{
	set<int> s1;
	s1.insert(5);
	s1.insert(4);
	s1.insert(3);
	s1.insert(2);
	printset(s1);// 2 3 4 5

	if (s1.empty())
	{
		cout << "kong" << endl;
	}
	else {
		cout << "bukong" << endl;
	}
	s1.erase(s1.begin());//删第一个 3 4 5
	s1.erase(3);//删除元素3 得到 4 5
	printset(s1);
}

set

//查找
void test2()
{
	set<int> s1;
	s1.insert(5);
	s1.insert(4);
	s1.insert(3);
	s1.insert(2);
	printset(s1);// 2 3 4 5

	//对于set 没有value  key就是value
	set<int>::iterator  pos = s1.find(3);
	//判断是否找到
	if (pos != s1.end())
	{
		cout << "找到了,值为" << *pos << endl;
	}
	else {
		cout << "没找到" << endl;
	}
	//count(key)查找key元素的个数,对于set而言 结果0或者1
	int num=s1.count(3);

	//lower_bound(keyElem)  //返回第一个key>=keyElem元素的迭代器
	set<int>::iterator it= s1.lower_bound(3);
	if (it != s1.end())
	{
		cout <<"找到了"<< *it << endl;

	 }
	else {
		cout << "无" << endl;
	}
	//upper_bound(keyElem)  返回第一个key>keyElem元素的迭代器
	set<int>::iterator it1 = s1.upper_bound(3);
	if (it1 != s1.end())
	{
		cout << "找到了" << *it1 << endl;

	}
	else {
		cout << "无" << endl;
	}
	//equal_range(keyElem)返回容器中key与keyElem相等的上下限的两个迭代器
	//上下限 就是upper_bound lower_bound
	s1.equal_range(4);
	pair<set<int>::iterator, set<int>::iterator> ret= s1.equal_range(4);
	//ret.first;//第一个迭代器
	if (ret.first != s1.end())
	{
		cout << "下限是" << *(ret.first)<< endl;
	}
	else {
		cout << "没找到" << endl;
	}
	if (ret.second != s1.end())
	{
		cout << "上限是" << *(ret.second) << endl;
	}
	else {
		cout << "没找到" << endl;
	}

}

pair

// pair.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
void test01()
{
	//第一种创建方式
	pair<string, int> p(string("aaa"), 100);
	cout << "姓名" << p.first << endl;
	cout << "年龄" << p.second << endl;
	//第二种创建方式
	pair<string, int> p2 = make_pair("bbb", 200);
	cout << "姓名" << p2.first << endl;
	cout << "年龄" << p2.second << endl;



}

int main()
{
	test01();
    return 0;
}


set不允许插入重复的值

//set不允许插入重复的值
void test3()
{
	set<int> s1;
	pair<set<int>::iterator,bool> ret= s1.insert(10);
	if (ret.second)
	{
		cout<<"插入成功 "<< endl;
	}
	else {
		cout << "插入失败" << endl;
	}
	ret = s1.insert(10);
	if (ret.second)
	{
		cout << "插入成功 " << endl;
	}
	else {
		cout << "插入失败" << endl;
	}
	s1.insert(10);
	printset(s1);//10 只有一个
	//multiset 允许插入重复值
	mul.insert(10);
	mul.insert(10);//两个都插入成功
}

排序

void test04()
{
	//set<int> s1;
	set<int, myCompare>s1;//因为需要放入类型 ,所以是用仿函数
	s1.insert(5);
	s1.insert(4);
	s1.insert(3);
	s1.insert(2);
	//printset(s1);// 2 3 4 5
	//想要从大到小排序
	//在插入之前制定排序规则
	for (set<int, myCompare>::iterator it = s1.begin(); it != s1.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

set容器插入自定义类型数据

class Person{
public:
	Person(string name, int age)
	{
		this->age = age;
		this->name = name;

	}
public:
	string name;
	int age;
};
//仿函数
class comPerson
{
public:
	bool operator()(const Person &p1, const Person & p2)
	{
		return p1.age > p2.age;
	}
};
void test5()
{
	set<Person, comPerson> s1;
	Person p1("aaa", 1);
	Person p2("bbb", 2);
	Person p3("ccc", 3);
	
	//s1.insert(p1);
	//s1.insert(p2);
	//s1.insert(p3);
	//插入失败 因为插入时 set容器不知道怎么对它排序
	//插入自定义类型,要先制定好排序规则
	//排序规则写在	set<Person> s1 内

	s1.insert(p1);
	s1.insert(p2);
	s1.insert(p3);
	for (set<Person, comPerson>::iterator it = s1.begin(); it != s1.end(); it++)
	{
		cout << "姓名" << (*it).name << "   年龄" << (*it).age << endl;
	}
}

上一篇: Set

下一篇: