set容器
特点:
- 插入时就会排序数据
- 插入重复数据无效
set.size() | 返回容器大小 |
set.empty() | 判断容器是否为空 |
set.swap( set s1 ) | 交换两个容器内的值 |
set.insert() | 插入数据,会返回pair类型的值 |
set.erase( elem / pos) | 删除数据 |
set.find(key) | 查找key是否存在,若存在返回该元素的迭代器,没找到返回end() |
set.count() | 统计元素的个数,在set中几乎没有作用 |
multiset
特点:与set几乎完全一样,但允许插入重复数据
以上两个容器对于自定义的数据,要指定排序规则才能insert,否则会报错
- 使用自定义数据类型,并将数据改为降序
需要在创建容器之前定义你排序的仿函数
set<数据类型,仿函数>s1;
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#include<set>
#include<string>
class Person
{
public:
Person(string name, int age)
{
this->name = name;
this->age = age;
}
string name;
int age;
};
class MyCompare
{
public:
bool operator()(const Person& p1, const Person& p2) const
{
return p1.age > p2.age;
}
};
void test01()
{
set<Person, MyCompare> s1;
Person p1("刘备", 10);
Person p2("关羽", 30);
Person p3("张飞", 20);
Person p4("孙权", 40);
s1.insert(p1);
s1.insert(p2);
s1.insert(p3);
s1.insert(p4);
for (set<Person, MyCompare>::iterator it = s1.begin(); it != s1.end(); it++)
{
cout << "姓名:" << it->name << " 年龄:" << it->age << endl;
}
}
int main()
{
test01();
return 0;
}
map容器
- 每一个元素都是成对出现的,类型为pair
- pair的第一个元素为key,第二个元素为value
- 插入时会自动排序
- map不允许重复的key,multimap允许重复的key
map.size() | 返回容器大小 |
map.empty() | 判断容器是否为空 |
map.swap( map s1 ) | 交换两个容器内的值 |
map.insert() | 插入数据 |
map.erase( key / pos) | 删除数据 |
map.find(key) | 查找key是否存在,若存在返回该元素的迭代器,没找到返回end() |
map.count() | 统计元素的个数,在map中几乎没有作用 |
map<int, int> m;
//第一种方式,使用pair<类型1,类型2>(key, value)
m.insert(pair<int, int>(1,10));
//第二种,使用make_pair(key, value)
m.insert(make_pair(2,20));
//第三种,使用map<类型1,类型2>value_type(key, value)
m.insert(map<int,int>value_type(3,30));
//第四种,使用map[key] = value
m[4] = 40;
map容器想改变排序顺序,跟set一样重新定义仿函数就可以了。