产品网站免费模板下载地址,a5源码网站,张江网站建设,在线个人资料制作网站文章目录 set/multiset容器set基本概念简介区别 set的构造和赋值功能描述函数原型代码示例运行结果 set的大小和交换功能描述函数原型代码示例运行结果 set的插入和删除功能描述函数原型代码示例运行结果 set查找和统计函数原型代码示例运行结果 set和multiset区别区别代码示例… 文章目录 set/multiset容器set基本概念简介区别 set的构造和赋值功能描述函数原型代码示例运行结果 set的大小和交换功能描述函数原型代码示例运行结果 set的插入和删除功能描述函数原型代码示例运行结果 set查找和统计函数原型代码示例运行结果 set和multiset区别区别代码示例运行结果 pair队组创建功能描述创建方式代码示例运行结果 set容器排序代码示例 map容器map基本概念简介本质优点map和multimap区别 map的构造和赋值函数原型代码示例 map大小和交换代码示例 map插入和删除函数原型代码示例 map查找和统计函数原型代码示例 map容器排序主要技术点代码示例 set/multiset容器
set基本概念
简介 所有元素都会在插入时被自动排序 set/multiset属于关联式容器底层结构是用二叉树实现
区别 set不允许容器中有重复的元素 multiset允许容器中有重复的元素
set的构造和赋值
功能描述
创建set容器及赋值
函数原型 代码示例
#include iostream
#include setusing namespace std;void printSet(const setint s) {for (setint::const_iterator it s.begin(); it ! s.end(); it) {cout *it ;}cout endl;
}void test() {// 默认构造setint s1;s1.insert(1);s1.insert(3);s1.insert(4);printSet(s1);// 拷贝构造setint s2(s1);printSet(s2);// 重载等号操作符setint s3 s1;printSet(s3);
}int main() {test();return 0;
}运行结果 set的大小和交换
功能描述
统计set大小及交换set容器
函数原型 代码示例
#include iostream
#include setusing namespace std;void printSet(const setint s) {for (setint::const_iterator it s.begin(); it ! s.end(); it) {cout *it ;}cout endl;
}void test() {// 默认构造setint s1;s1.insert(1);s1.insert(3);s1.insert(2);s1.insert(4);printSet(s1);cout set容器的大小 s1.size() endl;cout set容器是否为空 s1.empty() endl;setint s2;s2.insert(7);s2.insert(5);cout 交换前 endl;printSet(s1);printSet(s2);s1.swap(s2);cout 交换后 endl;printSet(s1);printSet(s2);
}int main() {test();return 0;
}运行结果 set的插入和删除
功能描述
set容器进行插入和删除数据
函数原型 代码示例
#include iostream
#include setusing namespace std;void printSet(const setint s) {for (setint::const_iterator it s.begin(); it ! s.end(); it) {cout *it ;}cout endl;
}void test() {// 默认构造setint s1;for (int i 0; i 10; i) {// 使用insert向容器中插入元素s1.insert(i);}printSet(s1);cout erase删除指定位置的元素:;s1.erase(s1.begin());cout erase删除给定元素:;s1.erase(3);printSet(s1);cout erase 清空;s1.erase(s1.begin(), s1.end());printSet(s1);cout clear 清空;s1.clear();
}int main() {test();return 0;
}运行结果 set查找和统计
函数原型 代码示例
#include iostream
#include setusing namespace std;void printSet(const setint s) {for (setint::const_iterator it s.begin(); it ! s.end(); it) {cout *it ;}cout endl;
}void test() {// 默认构造setint s1;for (int i 0; i 10; i) {// 使用insert向容器中插入元素s1.insert(i);}printSet(s1);setint::iterator pos s1.find(5);if (pos ! s1.end()) {cout 找到了 endl;} else {cout 没找到 endl;}cout 统计给定值的出现次数;int count s1.count(2);// 对于set而言统计的结果要么是1要么是0cout count endl;
}int main() {test();return 0;
}运行结果 set和multiset区别
区别 set不可以插入重复数据而multiset可以 set插入数据的同时会返回插入结果表示插入是否成功 multiset不会检测数据因此可以插入重复数据
代码示例
#include iostream
#include setusing namespace std;void printSet(const multisetint s) {for (multisetint::const_iterator it s.begin(); it ! s.end(); it) {cout *it ;}cout endl;
}void test1() {setint s;pairsetint::iterator, bool ret s.insert(1);if (ret.second) {cout 第一次插入成功 endl;} else {cout 第一次插入失败 endl;}ret s.insert(1);if (ret.second) {cout 第二次插入成功 endl;} else {cout 第二次插入失败 endl;}
}void test2() {// 默认构造multisetint s1;s1.insert(1);s1.insert(1);s1.insert(2);s1.insert(4);s1.insert(4);s1.insert(4);printSet(s1);int count s1.count(4);cout 4的数量 count endl;
}int main() {test1();test2();return 0;
}运行结果 pair队组创建
功能描述
成对出现数据利用队组可以返回两个数据
创建方式 代码示例
#include iostreamusing namespace std;void test() {pairint, int p1(1, 1);cout p1.first p1.second endl;pair string, string p2 make_pair(Tom, cat);cout p2.first p2.second endl;}int main() {test();return 0;
}运行结果 set容器排序 set默认插入的时候是从小到大排序的 利用仿函数可以实现从大到小排序
代码示例
#include iostream
#include setusing namespace std;class Person {
public:Person(string name, int age) {this-name name;this-age age;}// 对于自定义的数据类型需要指定排序规则
// bool operator(const Person p) const {
// if (name p.name) {
// return true;
// } else if (name p.name) {
// return false;
// } else {
// return age p.age;
// }
// }
//string name;int age;
};class comparePerson{
public:bool operator()(const Person p1, const Person p2) {return p1.age p2.age;}
};void printPersonSet(const set Person s) {for (setPerson::const_iterator it s.begin(); it ! s.end(); it) {cout name (*it).name age: (*it).age endl;}
}void test() {Person p1(sad1, 1);Person p2(sad2, 2);Person p3(sad3, 3);Person p4(sad4, 4);Person p5(sad5, 5);Person p6(sad6, 6);Person p7(sad6, 5);set Person, comparePerson s1;s1.insert(p1);s1.insert(p2);s1.insert(p3);s1.insert(p4);s1.insert(p5);s1.insert(p6);s1.insert(p7);for (setPerson::const_iterator it s1.begin(); it ! s1.end(); it) {cout name (*it).name age: (*it).age endl;}
}int main() {test();return 0;
}map容器
map基本概念
简介 map中所有元素都是pair pair中第一个元素为key (键值)起到索引作用第二个元素为value (实值) 所有元素都会根据元素的键值自动排序
本质
map/multimap属于关联式容器底层结构是用二叉树实现
优点
可以根据key值快速找到value值
map和multimap区别 map中不允许有重复的key值元素 multimap中不允许有重复的key值元素
map的构造和赋值
函数原型 代码示例
#include iostream
#include mapusing namespace std;void printMap(mapint, int mp) {for (mapint, int::iterator it mp.begin(); it ! mp.end(); it) {cout (*it).first (*it).second \t;}cout endl;
}void test() {cout 默认构造函数;mapint, int mp;for (int i 0; i 5; i) {mp[i] i;}printMap(mp);cout 拷贝构造函数;mapint, int mp1(mp);printMap(mp1);cout 重载等号操作符;mapint, int mp2 mp;printMap(mp2);
}int main() {test();return 0;
}map大小和交换
代码示例
#include iostream
#include mapusing namespace std;void printMap(mapint, int mp) {for (mapint, int::iterator it mp.begin(); it ! mp.end(); it) {cout (*it).first (*it).second \t;}cout endl;
}void test() {cout 默认构造函数;mapint, int mp;for (int i 0; i 5; i) {mp[i] i;}printMap(mp);cout mp大小: mp.size() endl;if (mp.empty()) {cout mp为空 endl;} else {cout mp不为空 endl;}mapint, int mp1;for (int i 5; i 0; i--) {mp1[i] i;}printMap(mp1);cout 交换后 endl;mp1.swap(mp);printMap(mp);printMap(mp1);
}int main() {test();return 0;
}map插入和删除
函数原型 代码示例
#include iostream
#include mapusing namespace std;void printMap(mapint, int mp) {for (mapint, int::iterator it mp.begin(); it ! mp.end(); it) {cout (*it).first (*it).second \t;}cout endl;
}void test() {cout mp insert: ;mapint, int mp;pairint, int p1(4, 6);pairint, int p2(2, 1);pairint, int p3(5, 3);pairint, int p4(1, 6);mp.insert(p1);mp.insert(p2);mp.insert(p3);mp.insert(p4);printMap(mp);cout mp删除指定key: ;mp.erase(2);printMap(mp);cout mp删除指定pos: ;mp.erase(mp.begin());printMap(mp);cout mp删除指区间所有元素: ;mp.erase(mp.begin(), mp.end());printMap(mp);cout 清空mp;mp.clear();printMap(mp);
}int main() {test();return 0;
}map查找和统计
函数原型 代码示例
#include iostream
#include mapusing namespace std;void printMap(mapint, int mp) {for (mapint, int::iterator it mp.begin(); it ! mp.end(); it) {cout (*it).first (*it).second \t;}cout endl;
}void test() {cout mp insert: ;mapint, int mp;pairint, int p1(4, 6);pairint, int p2(2, 1);pairint, int p3(5, 3);pairint, int p4(1, 6);mp.insert(p1);mp.insert(p2);mp.insert(p3);mp.insert(p4);printMap(mp);mapint, int::iterator pos mp.find(3);if (pos ! mp.end()) {cout 3 find endl;} else {cout 3 not find endl;}cout 查找给定值出现的次数 mp.count(1) endl;
}int main() {test();return 0;
}map容器排序
主要技术点
利用仿函数可以改变函数规则
代码示例
#include iostream
#include mapusing namespace std;class DescCompare {
public:// error: no matching function for call to object of type const DescCompare,所以需要使用const修饰bool operator()(int a, int b) const {return a b;}
};void test() {cout mp insert: ;mapint, int, DescCompare mp;pairint, int p1(4, 6);pairint, int p2(2, 1);pairint, int p3(5, 3);pairint, int p4(1, 6);mp.insert(p1);mp.insert(p2);mp.insert(p3);mp.insert(p4);for (mapint, int, DescCompare::const_iterator it mp.begin(); it ! mp.end(); it) {cout (*it).first (*it).second \t;}cout endl;
}int main() {test();return 0;
}