52STL

it2025-05-01  8

52STL_set&multiset

基本概念示例代码

基本概念

set&multiset(集与多集) 用来保存大量数据

set——数据不能重复、multiset——数据可以重复

set结构速度较vector结构更快(其使用了二叉树结构)

基本操作

insert() 插入后会自动排序count() 和find() count用来统计数据出现的个数,find用来查找数据,但是不能通过find对数据进行修改!erase() 用来删除数据

示例代码

#include <iostream> #include <set> using namespace std; template <typename Container> //显示模板函数的声明 void PrintContents(const Container &c); typedef set<int> SETINT; //定义别名 typedef multiset<int> MSETINT; int main() { set<int> a; multiset<int> ma; a.insert(60); a.insert(-1); a.insert(3000); //插入后会自动排序 a.insert(60); //自动丢弃重复的数据 PrintContents(a); // cout << "显示set里面的数据:" << endl; // set<int>:: const_iterator i = a.begin(); // while(i != a.end()) // { // cout << *i << endl; // ++i; // } ma.insert(3000); ma.insert(a.begin(), a.end()); //a中数据全部插入 ma.insert(3000); //multiset允许重复 ma.count(3000); //计算3000的个数 cout << "multiset里有" << ma.count(3000) << "个3000" << endl; PrintContents(ma); // cout << "显示multiset里面的数据:" << endl; // set<int>:: const_iterator mi = ma.begin(); // while(mi != ma.end()) // { // cout << *mi << endl; // ++mi; // } SETINT b; b.insert(43); b.insert(78); b.insert(-1); b.insert(124); SETINT::const_iterator j; for(j = b.begin(); j != b.end(); ++j) cout << *j << endl; //find查找函数 SETINT::iterator j_found = a.find(-1); //返回一个迭代器 if(j_found != b.end()) //检查是否找到 cout << "找到了:" << *j_found << endl; else cout << "没找到" << endl; cout << endl; //不能通过find对数据进行修改 MSETINT c; c.insert(43); c.insert(78); c.insert(78); c.insert(124); c.insert(-1); MSETINT::const_iterator k; cout << "multiset里有" << c.size() << "个数据." << endl; PrintContents(c); cout << "要删除的数据:"; int nNumberToErase = 0; cin >> nNumberToErase; c.erase(nNumberToErase); //删除数据 cout << "删除后的数据是:" << endl; PrintContents(c); c.clear(); //清空 PrintContents(c); return 0; } template <typename Container> void PrintContents(const Container &c) { typename Container::const_iterator i = c.begin(); while(i != c.end()) { cout << *i << endl; ++i; } cout << endl; }
最新回复(0)