iterator insert(iterator i, const TYPE& val){ set<int> s; s.insert(2); s.insert(9); s.insert(6);}方式二:将迭代器start开始到end结束返回内的元素插入到集合中void insert(intput iterator start, input iterator end);方式三:在当前集合中插入val元素,并返回指向该元素的迭代器和一个布尔值来说明val是否成功的被插入了pair inser(const TYPE& val);***知识迁移***有关pair结构的说明:template <class t1, class t2> struct pair{ typedef t1 first_type; typedef t2 second_type; t1 first; t2 second;}(2)erase:删除指定的元素方式一:删除指定位置的值:void erase(iterator position)set<int> s; s.insert(2); s.insert(9); s.insert(6); s.erase(6); s.erase(9);方式二:删除等于key值得所有元素,返回被删除元素的个数:size_type erase(const key_type &key);方式三:删除从start开始到end结束的元素:void erase(iterator start, iterator end);(3)swap:交换当前集合和object集合中的元素(实现原理和普通的swap一样)void swap(set &object);{ int arr[] = { 3, 5, 6, 32, 1, 7, 98, 4, 5 }; set<int> s1(arr,arr+3); set<int> s2(arr+2,arr+5); //swap(s1, s2);//一般的swap也可以完成交换 s1.swap(s2);//swap set s1.erase(s1.find(6)); set<int>::iterator it4 = s1.begin(); while (it4 != s1.end()) { cout << *it4 << " "; it4++; } cout << endl;}(4)clear:清空当前集合中的元素void clear()Modifiers:接口相关的代码演示B----Iterators:(1)begin:返回指向当前集合中第一个元素的迭代器iteator begin();(2)end:返回指向当前集合中最后一个元素的迭代器const_iterator end();void testset(){ set<int>::iterator it1 = s.begin(); while (it1 != s.end())//默认升序排列 { cout << *it1 << " "; it1++; }}(3)rbegin:返回指向当前集合中最后一个元素的反向迭代器iteator rbegin();(4)rend:返回指向集合中第一个元素的反向迭代器const_iterator rend();***C++11新特性***(5)cbegin:返回指向当前集合中第一个元素的const迭代器iteator begin()const;(6)cend:返回指向当前集合中最后一个元素的const迭代器const_iterator end()const;C----Capacity:(1)empty:如果当前集合为空,返回true;否则返回falsebool empty();(2)size:统计当前集合中元素的个数size_t size();(3)maxsize:返回当前集合能容纳元素的最大限值D----Operations:(1)find:寻找制定的元素{ map<string, int> first; first.insert(pair<string, int>("ytrrs", 4)); first.insert(pair<string, int>("sfgt", 5)); first.erase("Word"); first.erase(first.find("sfgt")); first.insert(make_pair("zxdgd", 4)); first.insert(make_pair("asdfg", 7)); map<string, int>::iterator it = first.begin();//根据传入的字符串的首字符的ascii码值进行排序 while (it != first.end()) { cout << it->first << " " << it->second << endl; it++; }}(2)count:判断所指元素是否在该集合{ set<int> s; s1.insert(4); s1.insert(8); for (size_t i = 0; i < 10; ++i) { if (s1.count(i))//count方法判断指定的元素是否在该容器中 cout << "存在该元素" << endl; else cout << "不存在该元素" << endl; }}(3)lower_bound:返回指向大于(或等于)某值的第一个元素的迭代器(4)upper_bound:返回大于某个值元素的迭代器{ map<string, int>::iterator ret1, ret2; ret1 = first.lower_bound("cccc"); //lower_bound返回指向大于(或等于)某值的第一个元素的迭代器 cout << ret1->first << endl; ret2 = first.upper_bound("asdfg");//upper_bound返回指向大于某个值元素的迭代器 while (ret2 != first.end()) { cout << ret2->first << " " << ret2->second << endl; ret2++; }}二、百度面试题----员工最喜欢的水果(TopK问题)#include <iostream>#include <set>#include <map>#include <algorithm>#include <string>#include <vector>using namespace std;template <typename K, typename V>void CountTopK(string fruits[], size_t sz, const map<K, V> &m){ map <string, int> count; for (size_t i = 0; i < sz; ++i) { ////方法1 //map <string,int>::iterator it = count.find(fruits[i]); //if (it != count.end()) //{ //it->second++; ////*(it).second++; //} //else //{ //count.insert(pair<string,int>(fruits[i],1)); //} ////方法2 //pair <map<string,int>::iterator,bool> ret; //ret = count.insert(pair<string,int>(fruits[i],1)); //if (ret.second == false) //{ //ret.first->second++; //} //方法3 count[fruits[i]]++; } //将迭代器导入vector vector<map<string, int>::iterator> heap; map<string, int>::iterator mapIt = count.begin(); while (mapIt != count.end()) { heap.push_back(mapIt); ++mapIt; } //建小堆 struct Com { bool operator()(const map<string, int>::iterator l, const map<string, int>::iterator r) { return l->second < r->second; } }; sort(heap.begin(), heap.end(), Com()); //make_heap(heap.begin(),heap.end(),com()); //int diff = heap.size() - k; ////向下调整 //while(diff--) //{ //pop_heap(heap.begin(),heap.end(),com()); //heap.pop_back(); //} //输出结果 while (heap.size() != 0) { cout << heap.back()->first << ":" << heap.back()->second << endl; heap.pop_back(); }}int main(){ map <string, int> count; string fruits[] = { "apple", "banana", "orange", "pineapple", "grape", "banana", "orange", "apple", "apple", "orange", "pineapple", "grape", "orange", "pineapple", "pear", "grapefruit", "mango", "mango juice", "apple", "Hami melon", "melon", "peach", "banana", "pineapple", "grape", "orange", "pineapple", "pear", "grapefruit", "mango", "apple", "melon", "peach", "banana", "melon", "peach", "banana", "Hami melon", "pineapple", "grape", "orange", "pineapple", "pear", "grapefruit", "mango", "peach", "peach" }; size_t sz = sizeof(fruits) / sizeof(fruits[0]); CountTopK(fruits, sz, count); system("pause"); return 0;}
新闻热点
疑难解答