内存做硬盘缓存软件网站,网站建设资金请示,青岛企业做网站,网站是用什么技术做的STL中的multimap与map比较
主要区别
特性 map multimap
键唯一性 每个键只能出现一次 允许重复键
operator[] 支持 不支持
插入操作 插入重复键会失败 总是可以插入
访问方式 可直接通过键访问值 需要特殊方法处理多值
使用示例
map示例#xff08;键唯一#xff09;
#includ…STL中的multimap与map比较主要区别特性 map multimap键唯一性 每个键只能出现一次 允许重复键operator[] 支持 不支持插入操作 插入重复键会失败 总是可以插入访问方式 可直接通过键访问值 需要特殊方法处理多值使用示例map示例键唯一#includeiostream#includemap#includestringintmain(){std::mapint,std::stringstudentMap;// 插入元素studentMap[101]Alice;studentMap[102]Bob;studentMap[103]Charlie;// 尝试插入重复键会覆盖原有值studentMap[102]Bob Updated;// 覆盖原来的Bob// 使用insert不会覆盖studentMap.insert({104,David});autoresultstudentMap.insert({101,Alice Duplicate});// 插入失败键已存在std::coutInsert 101 again? (result.second?Success:Failed)\n;// 遍历for(constautopair:studentMap){std::coutID: pair.first, Name: pair.second\n;}// 直接通过键访问std::coutStudent 102: studentMap[102]\n;return0;}multimap示例允许重复键#includeiostream#includemap#includestringintmain(){std::multimapstd::string,std::stringcourses;// 插入元素允许重复键courses.insert({Math,Algebra});courses.insert({Math,Calculus});courses.insert({Physics,Mechanics});courses.insert({Math,Geometry});// 再次插入Math键courses.insert({Physics,Optics});// 遍历所有元素std::coutAll courses:\n;for(constautocourse:courses){std::coutDepartment: course.first, Course: course.second\n;}// 查找特定键的所有值std::string targetMath;autorangecourses.equal_range(target);std::cout\nAll Math courses:\n;for(autoitrange.first;it!range.second;it){std::coutit-second\n;}// 统计特定键的数量std::cout\nNumber of Math courses: courses.count(Math)\n;// 注意multimap不支持operator[]// courses[Math] New Course; // 错误无法编译return0;}实际应用场景场景1电话簿一人有多个电话#includeiostream#includemap#includevectorintmain(){// multimap实现一人可以有多个电话std::multimapstd::string,std::stringphonebook;phonebook.insert({Alice,123-4567});phonebook.insert({Alice,987-6543});phonebook.insert({Bob,555-1234});phonebook.insert({Alice,111-2222});// 查找Alice的所有电话autoalicePhonesphonebook.equal_range(Alice);std::coutAlices phone numbers:\n;for(autoitalicePhones.first;it!alicePhones.second;it){std::cout it-second\n;}return0;}场景2使用map模拟multimap功能#includeiostream#includemap#includevector#includestringintmain(){// 使用mapstring, vectorstring实现类似multimap功能std::mapstd::string,std::vectorstd::stringstudentCourses;// 添加课程studentCourses[Alice].push_back(Math);studentCourses[Alice].push_back(Physics);studentCourses[Bob].push_back(Chemistry);studentCourses[Alice].push_back(Computer Science);// 访问Alice的所有课程std::coutAlices courses:\n;for(constautocourse:studentCourses[Alice]){std::cout course\n;}return0;}常用方法对比操作 map multimap插入 insert() 或 operator[] 只能使用 insert()查找 find() 返回单个迭代器 equal_range() 返回迭代器对删除 erase(key) 删除一个元素 erase(key) 删除所有匹配键的元素计数 count() 返回0或1 count() 返回键出现的次数选择建议· 使用map当需要键值对且键是唯一的或者需要通过键快速查找/修改值· 使用multimap当键可能重复且需要维护所有关联值· 考虑替代方案有时 mapKey, vector 可能比multimap更方便特别是需要随机访问特定键的所有值时两种容器都基于红黑树实现提供了O(log n)的查找、插入和删除操作。