map_set使用说明
作者:互联网
map_set使用说明
map的底层结构大致是一个哈希表,set的底层结构大致是一个红黑树 不代表全部!
set
#include"map_set.h" //set的底层结构大致是一个红黑树 不代表全部! void test1() { //set的结构天生有排序+去重 set<int> s; s.insert(2); s.insert(2); s.insert(1); s.insert(4); s.insert(3); s.insert(4); s.insert(6); s.insert(5); for (auto& e : s) { cout << e << " "; } cout << endl; //而multiset是排序 不去重 multiset<int> s1; s1.insert(2); s1.insert(2); s1.insert(1); s1.insert(4); s1.insert(3); s1.insert(4); s1.insert(6); s1.insert(5); for (auto& e : s1) { cout << e << " "; } cout << endl; set<int>::iterator it = s.find(2);//set数据结构里的查找 O(logN) find(s.begin(), s.end(), 2);//算法结构里的查找 O(N) //*it = 2; set的const版本与非const版本都是不允许修改值的 if (it != s.end()) { cout << "查找到了" << endl; } else { cout << "未查找到"<<endl; } cout << endl; if (s.count(100))//count也用于查找 并且方便 { cout << "查找到了"<<endl; } else { cout << "未查找到"<<endl; } s.erase(3); s.erase(1000); //删值 当删的值不存在,不会有崩溃 set<int>::iterator it1 = s.find(3); set<int>::iterator it2 = s.find(1000); //s.erase(it1); //s.erase(it2); //删迭代器 当迭代器不存在,会崩溃 所以删迭代器时 需要加上判断 if (it1 != s.end()) { s.erase(it1); } if (it2 != s.end()) { s.erase(it2); } //这串代码 是可以持续删除指定值 //int x; //while (cin >> x) //{ // for (auto& e : s) // { // cout << e << " "; // } // cout << endl; // auto it3 = s.find(x); // if (it3 != s.end()) // { // s.erase(it3); // cout << "删除成功" << endl; // for (auto& e : s) // { // cout << e << " "; // } // cout << endl; // } // else // { // cout << "未查找到该值" << endl; // for (auto& e : s) // { // cout << e << " "; // } // cout << endl; // } //} //这串代码可以删除范围里的值 int x1, y2; for (auto& e : s) { cout << e << " "; } cout << endl; cout << "请输入范围: "; cin >> x1 >> y2; set<int>::iterator left = s.lower_bound(x1);//返回>=x的值 set<int>::iterator right = s.upper_bound(y2);//>x的值 //若数据为: 1 2 3 4 6 7 //输入 -1 5 //那么left=1 right=6 //但删除了数据为 :1 2 3 4 //删除后 6 7 right返回的值 是不删除的 删除的是left以及left后面的值和right前面的值 //如果输入 1 4 //那么删除的就是 1 2 3 4 //删除后 6 7 //如果right找到这个值 那么就删除,找不到就返回比他大的值,删除它前面的值 s.erase(left, right); for (auto& e : s) { cout << e << " "; } cout << endl; if (s1.count(4))//返回数据中有几个4 { cout << s1.count(4) << endl; s1.erase(4);//将4全部删除 for (auto& e : s1) { cout << e << " "; } } s.find(4);//multise里的数据有多个4时 返回中序的第一个4 } int main() { test1(); return 0; }
map
void test1() { string str; int x = 0; map<string, int> countmap; while (cin >> str) { //方法一: //pair<map<string, int>::iterator, bool> ret = countmap.insert(make_pair (str, 1)); //pair的为 <iterator,bool> 第一个为 first 第二个为 second //first(iteraotr) 里面存着 countmap<string,int> //second (bool) 里面存着 bool //第一个存数据 第二个判断数据中是否有重复的 没有重复则为false 有重复则为true //可以用auto 快速定义类型 //auto ret = countmap.insert(make_pair(str, 1)); //if (ret.second == false) //{ // ret.first->second++; //} //方法二: //可以优化为一条代码 //[]的重载 很方便 countmap[str]++;//查找+插入+修改 } //这里可直接修改 countmap["桃子"] = 100;//查找+插入+修改 countmap["葡萄"];//查找+插入 countmap["苹果"] = 50;//查找+修改 for (auto& e : countmap) { cout << e.first << " " << e.second <<"个"<< endl; } } int main() { test1(); return 0; }
这就是本篇的全部内容,感谢您能观看到这里,如若有问题请评论或私信,感谢您的观看!
标签:map,set,cout,insert,auto,s1,countmap,说明 来源: https://www.cnblogs.com/LonelyMoNan/p/16653012.html