set

xiaoxiao2022-06-11  30

Sets/Multisets:内部的元素依据其值自动排序,Set内的相同数值的元素只能出现一次,Multisets内可包含多个数值相同的元素,内部由二叉树实现(实际上基于红黑树(RB-tree)实现),便于查找; map和multisets也一样

1.构造
// constructing sets #include <iostream> #include <set> bool fncomp (int lhs, int rhs) {return lhs<rhs;} struct classcomp { bool operator() (const int& lhs, const int& rhs) const {return lhs<rhs;} }; int main () { std::set<int> first; // empty set of ints int myints[]= {10,20,30,40,50}; std::set<int> second (myints,myints+5); // range std::set<int> third (second); // a copy of second std::set<int> fourth (second.begin(), second.end()); // iterator ctor. std::set<int,classcomp> fifth; // class as Compare bool(*fn_pt)(int,int) = fncomp; std::set<int,bool(*)(int,int)> sixth (fn_pt); // function pointer as Compare //can first=second return 0; }
2.操作
2.1容量大小
//size //empty //max_size
2.2modify access
/* * set element is order,and is only * modify access * insert erase swap clear */ #include <iostream> #include <set> #include<QDebug> int main () { std::set<int> myset; // set some initial values: for (int i=1; i<=5; ++i) myset.insert(i*10); // set: 10 20 30 40 50 int myints[]= {5,10,15}; // 10 already in set, not inserted myset.insert (myints,myints+3); //myset contains: 5 10 15 20 30 40 50 myset.insert(11); //myset contains: 5 10 11 15 20 30 40 50 myset.erase(myset.cbegin()); //erase 5 //myset.erase(myset.begin(),myset.begin()+3);链式存储,不能这样计算地址,可以如下: auto it=myset.find(15); myset.erase(myset.begin(),it); myset.erase(20); myset.clear(); //first.swap(second) return 0; }
2.3其他
//find count lower_bound upper_bound equal_bound // set::find #include <iostream> #include <set> int main () { std::set<int> myset; std::set<int>::iterator it; // set some initial values: for (int i=1; i<=5; i++) myset.insert(i*10); // set: 10 20 30 40 50 it=myset.find(20); myset.erase (it); myset.erase (myset.find(40)); std::cout << "myset contains:"; for (it=myset.begin(); it!=myset.end(); ++it) std::cout << ' ' << *it; std::cout << '\n'; return 0; } // set::count #include <iostream> #include <set> int main () { std::set<int> myset; // set some initial values: for (int i=1; i<5; ++i) myset.insert(i*3); // set: 3 6 9 12 for (int i=0; i<10; ++i) { std::cout << i; if (myset.count(i)!=0) std::cout << " is an element of myset.\n"; else std::cout << " is not an element of myset.\n"; } return 0; } // set::lower_bound/upper_bound #include <iostream> #include <set> int main () { std::set<int> myset; std::set<int>::iterator itlow,itup; for (int i=1; i<10; i++) myset.insert(i*10); // 10 20 30 40 50 60 70 80 90 itlow=myset.lower_bound (30); // ^ itup=myset.upper_bound (60); // ^ myset.erase(itlow,itup); // 10 20 70 80 90 std::cout << "myset contains:"; for (std::set<int>::iterator it=myset.begin(); it!=myset.end(); ++it) std::cout << ' ' << *it; std::cout << '\n'; return 0; }
转载请注明原文地址: https://www.6miu.com/read-4931565.html

最新回复(0)