multimap-swap

本文展示了一个使用 C++ 实现的 multimap 交换示例。通过创建两个包含不同整数列表的多重映射 m1 和 m2,并利用 multimap 的 swap 方法交换两者的内容,演示了 multimap 之间的数据交换过程。
////////////////////////////////////////
//      2018/05/06 9:39:32
//      multimap-swap

// exchage two maltimap
#include <iostream>
#include <map>
#include <list>
#include <numeric>
#include <algorithm>
#include <iterator>

using namespace std;

typedef multimap<int, list<int>> M;

void print(M m){
    M::iterator It = m.begin();
    list<int>::iterator Li;
    while (It != m.end()){
        cout << "key:" << It->first
            << ";value:";
        for (Li = It->second.begin(); Li != It->second.end(); Li++){
            cout << *Li << " ";
        }
        It++;
    }
    cout << endl;
}

//-------------------------------
int main(){
    list<int> L1, L2;
    L1.push_back(1);
    L1.push_back(2);
    L1.push_back(3);

    L2.push_back(5);
    copy(L1.begin(), L1.end(), back_inserter(L2));

    M m1, m2;
    m1.insert(M::value_type(1,L1));
    m2.insert(M::value_type(2,L2));

    cout << "multimap m1:" << endl;
    print(m1);

    cout << "multimap m2:" << endl;
    print(m2);

    if (m1 == m2){
        cout << "multimaps m1 and m2 are equal." << endl;
    }
    else{
        cout << endl << "After m1.swap(m2)" << endl;
        m1.swap(m2);
        cout << "multimap m1:" << endl;
        print(m1);
        cout << "multimap m2:" << endl;
        print(m2);
    }
    return 0;
}


/*
OUTPUT:
    multimap m1:
    key:1;value:1 2 3
    multimap m2:
    key:2;value:5 1 2 3

    After m1.swap(m2)
    multimap m1:
    key:2;value:5 1 2 3
    multimap m2:
    key:1;value:1 2 3
*/ 
内容概要:本文为《科技类企业品牌传播白皮书》,系统阐述了新闻媒体发稿、自媒体博主种草与短视频矩阵覆盖三大核心传播策略,并结合“传声港”平台的AI工具与资源整合能力,提出适配科技企业的品牌传播解决方案。文章深入分析科技企业传播的特殊性,包括受众圈层化、技术复杂性与传播通俗性的矛盾、产品生命周期影响及2024-2025年传播新趋势,强调从“技术输出”向“价值引领”的战略升级。针对三种传播方式,分别从适用场景、操作流程、效果评估、成本效益、风险防控等方面提供详尽指南,并通过平台AI能力实现资源智能匹配、内容精准投放与全链路效果追踪,最终构建“信任—种草—曝光”三位一体的传播闭环。; 适合人群:科技类企业品牌与市场负责人、公关传播从业者、数字营销管理者及初创科技公司创始人;具备一定品牌传播基础,关注效果可量化与AI工具赋能的专业人士。; 使用场景及目标:①制定科技产品全生命周期的品牌传播策略;②优化媒体发稿、KOL合作与短视频运营的资源配置与ROI;③借助AI平台实现传播内容的精准触达、效果监测与风险控制;④提升品牌在技术可信度、用户信任与市场影响力方面的综合竞争力。; 阅读建议:建议结合传声港平台的实际工具模块(如AI选媒、达人匹配、数据驾驶舱)进行对照阅读,重点关注各阶段的标准化流程与数据指标基准,将理论策略与平台实操深度融合,推动品牌传播从经验驱动转向数据与工具双驱动。
### C++ 中 multimap 的使用方法及自定义比较函数定义 #### 1. multimap 的基本概念 `std::multimap` 是 C++ 标准库中的关联容器,允许存储键值对,并且支持键的重复。与 `std::map` 不同,`std::multimap` 允许一个键对应多个值。默认情况下,`std::multimap` 按照键的升序排列[^1]。 #### 2. multimap 的初始化与插入 以下是 `std::multimap` 的几种常见初始化和插入方式: ```cpp #include <iostream> #include <map> int main() { // 使用初始化列表创建 multimap std::multimap<int, int> multimap1 = {{1, 2}, {1, 3}, {2, 4}}; // 使用 pair 插入元素 std::pair<int, int> pair1 = {1, 5}; std::multimap<int, int> multimap2 = {pair1, std::make_pair(1, 6)}; // 使用拷贝构造函数 std::multimap<int, int> multimap3(multimap2); // 使用赋值操作 std::multimap<int, int> multimap4 = multimap3; // 单个元素初始化 std::multimap<int, int> multimap5{std::pair<int, int>(1, 7)}; } ``` #### 3. 自定义比较函数 如果需要对 `std::multimap` 的键进行自定义排序,可以定义一个比较函数或比较结构体,并将其作为模板参数传递给 `std::multimap`。以下是一个示例: ```cpp #include <iostream> #include <map> #include <string> // 定义键类型为结构体 struct Key { int id; std::string name; }; // 定义比较函数对象 struct Compare { bool operator()(const Key& a, const Key& b) const { if (a.id != b.id) { return a.id < b.id; // 首先按 id 排序 } return a.name < b.name; // 如果 id 相同,则按 name 排序 } }; int main() { // 使用自定义比较函数创建 multimap std::multimap<Key, std::string, Compare> customMultimap; // 插入元素 customMultimap.insert({{1, "Alice"}, "Data1"}); customMultimap.insert({{1, "Bob"}, "Data2"}); customMultimap.insert({{2, "Charlie"}, "Data3"}); // 遍历 multimap for (const auto& [key, value] : customMultimap) { std::cout << "Key: (" << key.id << ", " << key.name << "), Value: " << value << std::endl; } return 0; } ``` #### 4. 常见使用函数 以下是一些常用的 `std::multimap` 成员函数及其用法: - **`insert()`**:插入键值对。 - **`erase()`**:删除指定键的所有值或特定位置的值。 - **`find()`**:查找指定键的第一个匹配项。 - **`count()`**:统计指定键的出现次数。 - **`equal_range()`**:返回包含所有指定键的范围。 - **`swap()`**:交换两个 `std::multimap` 的内容[^2]。 示例代码如下: ```cpp #include <iostream> #include <map> int main() { std::multimap<int, std::string> myMultimap = {{1, "Apple"}, {1, "Banana"}, {2, "Cherry"}}; // 查找键为 1 的所有值 auto range = myMultimap.equal_range(1); for (auto it = range.first; it != range.second; ++it) { std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl; } // 统计键为 1 的出现次数 std::cout << "Count of key 1: " << myMultimap.count(1) << std::endl; // 删除键为 1 的所有值 myMultimap.erase(1); // 遍历 multimap for (const auto& [key, value] : myMultimap) { std::cout << "Key: " << key << ", Value: " << value << std::endl; } return 0; } ``` #### 5. 注意事项 - 如果键是自定义类型(如结构体),必须提供有效的比较函数以确保严格弱序关系[^3]。 - 默认情况下,`std::multimap` 按照键的升序排列。如果需要降序排列,可以在比较函数中反转逻辑。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值