简介:本篇文章是《C++ STL初学者指南》系列教程第七篇,主要内容为讲解STL中多值关联容器multimap和multiset的使用方法及其应用场景。 本段落主要介绍了C++ STL中的multimap和multiset的使用方法。这两个容器都是STL的重要组成部分。 一、Multimap(一对多索引) Multimap是关联容器的一种,在功能上与map类似,但允许键值重复出现。它具有快速查找、插入和删除元素的优点,并且能够保持键值顺序。 在使用multimap时,需要包含头文件并引用std命名空间。基本操作包括初始化、添加元素、遍历集合、单键查询以及范围查询等。 以下是一个示例程序: ```cpp #include #include #include using namespace std; int main() { multimap mapStudent; multimap::iterator iter, beg, end; // 添加元素 mapStudent.insert(pair(0, student_one)); mapStudent.insert(pair(0, student_two)); // 错误,应为不同的键值对或不同名称 mapStudent.insert(pair(1, student_three)); // 遍历 for (iter = mapStudent.begin(); iter != mapStudent.end(); iter++) cout << iter->first << \t << iter->second << endl; // 单键查询 int count = mapStudent.count(0); iter = mapStudent.find(0); // 查找第一个匹配的元素 for (int i = 0; i < count; ++i, ++iter) cout << iter->first << \t << iter->second << endl; // 范围查询 beg = mapStudent.lower_bound(1); end = mapStudent.upper_bound(2); // 错误,应为不包括的上限值(此处假设没有键值2) for (; beg != end; ++beg) cout << beg->first << \t << beg->second << endl; // 删除 iter = mapStudent.find(1); if (iter != mapStudent.end()) mapStudent.erase(iter); return 0; } ``` 二、Multiset(多元集合) 与set相似,multiset也属于关联容器类型,但允许元素重复。它具有快速插入和删除以及查找的优点,并保持了顺序性。 基本操作包括初始化、添加元素、遍历等。 以下是一个使用multiset的示例程序: ```cpp #include #include #include using namespace std; int main() { multiset setInt; setInt.insert(5); setInt.insert(2); setInt.insert(8); setInt.insert(2); // 允许重复元素 for (auto iter = setInt.begin(); iter != setInt.end(); ++iter) cout << *iter << ; return 0; } ``` Multimap和multiset都是STL容器中的重要组件,能够在保持顺序的同时提供高效的查找、插入与删除操作。