关联式容器 底层结构使用红黑树实现(二叉树->二叉搜索树->平衡二叉树->红黑树) 自动排序 不可以修改值,可以通过删除再插入的方式实现 自定义数据类型:
class Person{ public: Person(string name, int age, int height){ this->m_name = name; this->m_age = age; this->m_height = height; } bool operator<(const Person &p2) const{ // 注意:函数和形参都要添加 const 修饰符 if(this->m_age == p2.m_age){ return this->m_height > p2.m_height; } return this->m_age < p2.m_age; } void printPerson()const{ cout << "姓名:" << this->m_name << " 年龄:" << this->m_age << " 身高:" << this->m_height << endl; } private: string m_name; int m_age; int m_height; }; int main() { set<Person> lp; lp....
注意事项 双向循环链表 不支持随机访问 因为不支持随机访问,所以也不能用全局的排序算法 sort 一般不支持随机访问的容器会自己提供 sort 方法 自定义类型要指定排序规则 排序案例 案例描述:将 Person 自定义数据类型进行排序,Person 中属性有姓名、年龄、身高
排序规则:按照年龄进行升序,如果年龄相同按照身高进行降序
class Person{ public: Person(string name, int age, int height){ this->m_name = name; this->m_age = age; this->m_height = height; } bool operator<(const Person &p2){ if(this->m_age == p2.m_age){ return this->m_height > p2.m_height; } return this->m_age < p2.m_age; } void printPerson()const{ cout << "姓名:" << this->m_name << " 年龄:" << this->m_age << " 身高:" << this->m_height << endl; } private: string m_name; int m_age; int m_height; }; int main() { list<Person> lp; lp....
先进先出 不允许遍历元素 queue 队列操作:
size()
empty()
先进后出 栈不允许遍历元素 不能随机存取 stack 栈操作:
size()
empty()
有 5 名选手:选手 ABCDE,10 个评委分别对每一名选手打分,去除最高分,去除评委中最低分,取平均分。
分析:
创建五名选手,放到 vector 中 遍历 vector 容器,取出来每一个选手,执行 for 循环,可以把 10 个评委打分存到 deque 容器中 sort 算法对 deque 容器中分数排序,去除最高和最低分 deque 容器遍历一遍,累加总分 获取平均分 class Player{ public: Player(string name){ m_name = name; m_avgScore = 0; } void setAvgScore(int v){ m_avgScore = v; } void printInfo()const{ cout << m_name << "的平均分为:" << m_avgScore << endl; } private: string m_name; int m_avgScore; }; void createPlayers(vector<Player> &v){ string nameSeed = "ABCDE"; for(int i = 0; i < nameSeed....