set和multiset属于关联式容器 ,由二叉树实现
1.set中不允许有重复的元素
2.multiset中允许有重复元素
3.set不可以插入重复数据 multiset可以
4.set插入数据时会返回插入结果,表示插入是否成功
5.multiset不会检测数据,因此就可以插入重复数据
set和multiset代码相同 下面只举例一种
set |
默认构造函数 |
set(const set&st) | 拷贝构造函数 |
set& operator=(const set&st) | 重载=号 |
size() | 返回元素个数 |
empty() | 判空 |
swap() | 交换 |
insert(elem) | 插入 elem |
clear() | 清空 |
erase(pos) | 删除迭代器所指的元素,返回下一个元素迭代器 |
erase(beg,end) | 删除区间内的所有元素,返回下一个元素迭代器 |
erase(elem) | 删除容器中值为elem的元素 |
find(pop) | 查找pop,存在返回该元素迭代器,否则返回set.end() |
count(pop) | 统计pop的个数 |
set容器默认从小到大排序,可以用仿函数改变排序
//仿函数
class Person
{
public:
bool operator()(int a, int b)const
{
return a > b;
}
};
void text()
{
//改变排序方式
setst;
st.insert(10);
st.insert(20);
st.insert(40);
st.insert(50);
st.insert(30);
for (set::iterator it = st.begin(); it != st.end(); it++)
{
cout << *it << " ";
}
}
6.自定义数据类型排序
给定一个Person类型
//创建一个person类
class Person
{
public:
Person(string name, int age)
{
Name = name;
Age = age;
}
string Name;
int Age;
};
//仿函数
class opop
{
public:
bool operator()(const Person&a, const Person &b)
{
//按照age排序
return a.Age > b.Age;
}
};
void text()
{
//给定排序方式
sets;
Person p1("A", 5);
Person p2("B", 25);
Person p3("D", 15);
Person p4("E", 35);
Person p5("C", 55);
s.insert(p1);
s.insert(p2);
s.insert(p3);
s.insert(p4);
s.insert(p5);
for (set::iterator it = s.begin(); it != s.end(); it++)
{
cout << (*it).Name << " " << (*it).Age << endl;
}
}
int main()
{
text();
return 0;
}
成对出现的数据 ,利用队组返回两个数据
pair |
|
pair |
pairp("name", 5);
cout << p.first << " " << p.second<p1=make_pair("name1", 10);
cout << p1.first << " " << p1.second << endl;
可以用pair来接收set的插入结果
//s.insert(10)会有一个返回值,表示是否插入成功
pair(set::iterator, bool) op = s.insert(10);