set:
所有元素在插入时自动排序,底层结构用二叉树实现。
set和multiset的区别:
set不允许容器中有重复的元素,multiset允许容器中有重复的元素。
set构造和赋值:
构造: //默认构造函数 setst; //拷贝构造函数 set(const set &st); 赋值: //重载等号操作符 set& operator=(const set &st);
set大小和交换:
//返回容器中元素的数目 size(); //判断容器是否为空 empty(); //交换两个集合容器 swap(st);
set插入和删除:
//在容器中插入元素。 insert(elem); //清除所有元素 clear(); //删除pos迭代器所指的元素,返回下一个元素的迭代器。 erase(pos); //删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。 erase(beg, end); //删除容器中值为elem的元素。 erase(elem);
例子:
#include
#include
using namespace std;
void print_set(const set& s){
for(set::const_iterator it=s.begin();it!=s.end();it++){
cout<<*it<<" ";
}
cout< s;
s.insert(10);
s.insert(20);
s.insert(15);
s.insert(14);
s.insert(12);
print_set(s);
s.erase(s.begin());
print_set(s);
s.erase(20);
print_set(s);
s.clear();
print_set(s);
}
int main() {
test01();
return 0;
}
set查找和统计:
//查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end(); find(key); //统计key的元素个数 count(key);
pair对组创建:
对于成对出现的数据,利用对组可以返回两个数据。
两种创建方式:
pairp ( value1, value2 ); pair p = make_pair( value1, value2 );
例子:
#include
#include
using namespace std;
void test01(){
pair pair1("li",16);
cout<<"name:"< pair2=make_pair("wang",20);
cout<<"name:"<
set容器排序:
利用仿函数可以改变排序规则。
例子:
#include
#include
using namespace std;
class MyCompare{
public:
bool operator()(int a,int b){
return a>b;
}
};
void test01(){
set s;
s.insert(5);
s.insert(15);
s.insert(10);
s.insert(16);
s.insert(20);
s.insert(3);
// 默认从小到大
for(set::iterator it=s.begin();it!=s.end();it++){
cout<<*it<<" ";
}
cout< s2;
s2.insert(15);
s2.insert(10);
s2.insert(20);
s2.insert(16);
for(set::iterator it=s2.begin();it!=s2.end();it++){
cout<<*it<<" ";
}
cout<
map:
map中所有元素都是pair;
pair中第一个元素为key,起到索引所用,第二个元素为value;
所有元素会根据元素的key进行排序。
本质:底层使用二叉树实现。
map和multimap区别:
map中不允许容器中有重复key值的元素;
multimap允许容器中有重复key值的元素。
map构造和赋值:
构造: //map默认构造函数: mapmp; //拷贝构造函数 map(const map &mp); 赋值: //重载等号操作符 map& operator=(const map &mp);
map大小和交换:
//返回容器中元素的数目 size(); //判断容器是否为空 empty(); //交换两个集合容器 swap(st);
map插入和删除:
//在容器中插入元素。 insert(elem); //清除所有元素 clear(); //删除pos迭代器所指的元素,返回下一个元素的迭代器。 erase(pos); //删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。 erase(beg, end); //删除容器中值为key的元素。 erase(key);
map查找和统计:
//查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end(); find(key); //统计key的元素个数 count(key);
例子:
#include
#include
map的排序也可以用仿函数改变排序规则,默认为按照key从小到大。