天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 130|回复: 0

要删除 `my_Map` 中所有与 `my_Map_sub` 中相同的键(即 `double` 类型的键)

[复制链接]
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
    发表于 2024-4-25 10:28:58 | 显示全部楼层 |阅读模式
    要删除 `my采用Map` 中所有与 `my采用Map采用sub` 中相同的键(即 `double` 类型的键),可以使用以下代码:

    ```cpp
    #include <algorithm>
    #include <map>

    // 假设已初始化 my采用Map 和 my采用Map采用sub

    for (const auto& entry : my采用Map采用sub) {
        my采用Map.erase(entry.first);
    }

    // 或者使用 C++17 标准及以后版本的范围 for 循环配合 erase-if 函数
    // 注意:erase-if 在 C++20 才正式成为标准的一部分,但一些编译器在 C++17 已实现该功能

    // std::ranges 是 C++20 引入的库,如果使用 C++17,可能需要包含头文件 <experimental/ranges>
    // 并将 std::ranges 替换为 std::experimental::ranges
    if constexpr (std::ranges::range<decltype(my采用Map采用sub)> && std::ranges::range<decltype(my采用Map采用sub)::value采用type>) {
        my采用Map.erase(std::remove采用if(my采用Map.begin(), my采用Map.end(),
            [&](const auto& map采用entry) {
                return std::ranges::find(my采用Map采用sub, map采用entry.first) != my采用Map采用sub.end();
            }),
            my采用Map.end());
    }
    ```

    第一种方法遍历 `my采用Map采用sub` 中的所有键,然后直接在 `my采用Map` 中逐个删除这些键。这种方法简单直观,适用于所有 C++ 版本。

    第二种方法使用了 C++17 及以上版本的范围 for 循环结合 `erase-if` 函数(C++20 才正式成为标准的一部分,但一些编译器在 C++17 已实现)。此方法通过 `remove采用if` 算法移除满足条件(即键存在于 `my采用Map采用sub` 中)的元素,然后调用 `erase` 删除这些已被标记为“应移除”的元素。这种方法更为简洁高效,特别是当 `my采用Map` 大小较大时。

    选择哪种方法取决于你的 C++ 编译器版本以及对代码简洁性和效率的需求。

     

     

     

     

    要删除 `my_Map` 中所有与 `my_Map_sub` 中相同的键(即 `double` 类型的键)
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-11-1 11:41 , Processed in 0.136187 second(s), 27 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表