如何删除 `multiset` 中的重复值的一个实例

在 C++ 中,std::multiset 容器允许存储多个相同的元素(即重复元素)。
要删除 multiset 中的某个值的一个实例,而不是删除所有相同的值,可以使用 erase() 方法的迭代器版本,该版本允许精确地删除某个位置的元素。

语法:

multiset.erase(iterator);

示例:

#include <iostream>
#include <set>

int main() {
    // 创建一个 multiset,并插入一些重复元素
    std::multiset<int> ms = {10, 20, 20, 30, 30, 30};

    // 打印 multiset 内容
    std::cout << "Original multiset: ";
    for (const auto& elem : ms) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    // 查找要删除的某个值(20)的迭代器
    auto it = ms.find(20);  // 只找到第一个 20 的位置

    // 删除该位置的元素(即删除一个 20)
    if (it != ms.end()) {
        ms.erase(it);  // 删除第一个找到的 20
    }

    // 打印删除后的 multiset 内容
    std::cout << "After erasing one '20': ";
    for (const auto& elem : ms) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

输出:

Original multiset: 10 20 20 30 30 30 
After erasing one '20': 10 20 30 30 30 

解释:

  1. ms.find(20) 返回 multiset 中第一个 20 的迭代器。
  2. ms.erase(it) 删除该位置的元素,只删除了一个 20

注意:

  • erase(iterator) 删除迭代器指向的元素,并且不会删除其他相同的值。
  • 如果想删除所有相同的元素,可以使用 ms.erase(value),但这会删除所有匹配的元素。
posted @   牛马chen  阅读(69)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示