wordpress 大学 1.3如何优化关键词
还剩下两个常用容器,一个是set(集合容器) , 一个是map容器
set/multiset 容器
set容器是关联式容器,该容器的特点是:所有元素都会在插入时被自动排序
set/multiset 都是关联式容器 ,其底层结构是使用二叉树实现的。
二者的区别是:set不允许容器中有重复的元素 , multiset允许容器中有重复的元素。
构造 :默认构造和拷贝构造 重载operator=
插入数据的时候没有push 只有insert。
现在来写写特殊的情况,一般的set中默认的是升序排列,下列这段代码第一次打印的时候显示的是 2,5,10,18,如果我想让其降序排列呢,那么还是按照之前的思路,构造一个仿函数即可。仿函数的本质其实是一个类。
class compare
{
public:bool operator()(int v1 , int v2)const // 需要加入const . 关键字表示 该操作符不会修改类的成员变量,确保 operator() 方法在对象内部是只读的。{return v1 > v2;}
};void printinfo(set<int,compare> &s)
{for(set<int,compare>::iterator it = s.begin() ; it != s.end() ; it++){cout << *it << " ";}cout << endl;
}void test01()
{set<int>s1;s1.insert(10);s1.insert(5);s1.insert(18);s1.insert(2);printinfo(s1);set<int , compare>s2 ; s2.insert(10);s2.insert(5);s2.insert(18);s2.insert(2);
}int main()
{test01();system("pause");return 0 ;
}
还学习了如何创建队组
队组: 成对出现的数据 , 利用队组可以放回两个数据
创建方式 pair<type , type> p (value1 , value2);pair<type , type> p = make_pair(value1 , value2);
总结:对于自定义数据类型 set必须指定排序规则才可以插入数据
map/multimap容器
map中所有元素都是pair pair中第一个元素是key(键值),起到索引作用 第二个元素是value(实值)。
所有元素会根据元素的键值自动排序 从小到大 。
map/multimap关联式容器,二叉树实现。
优点:可以快速根据key找到value。
map中不允许有重复key值的元素 multimap可以有。
使用率仅次与vector list。
构造赋值同set 插入数据的时候一定要使用队组。
使用:size empty swap find count
void printinfo(map<int, int> &m)
{for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) {cout << it->first << " " ;cout << (*it).second << " "<<endl;}cout << endl;
}
void test01()
{map<int, int>m1;//第一种m1.insert(make_pair(2, 2));//第二种m1.insert(pair<int , int>(1,10));m1.insert(pair<int, int>(45, 4));m1.insert(pair<int, int>(5, 6));m1.insert(pair<int, int>(9, 3));//第三种 不推荐m1.insert(map<int, int>::value_type(3, 30));//第四种 不推荐 如果要输出 cout<<m1[5]<< endl ; 他会先创建一个key为5 value为0的元素//[]不建议插数 用途使用key访问到valuem1[6] = 32;printinfo(m1);
}