- set和multiset容器
一、set容器构造,赋值,交换,大小
二、set容器插入和删除
三、set容器查找和统计
四、set和multiset的区别
- 4.1 pair对组的创建
五、改变set容器默认排序规则
- 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;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)