map,pair,set组合用法

1.map.count和map.find

例:map<pair<string,string>,set<string>>res; 定义了一个名为res的映射(map),其键(key)是一个由两个字符串组成的对(pair),值(value)是一个字符串集合(set)。

        res[{ip,name}].insert(a);  这行代码首先创建一个包含ipname的对作为键,然后在对应的集合中插入一个元素a。

        res.count({ip,name}) 计算键为{ip, name}的元素在映射res中出现的次数。由于映射的键是唯一的,所以这个计数应该要么是0(如果之前没有插入过这个键),要么是1(如果之前已经插入过这个键)。

        res[{ip,name}].count(b) 这行代码首先创建一个包含ipname的对作为键,然后在对应的集合中查找元素b的出现次数。

例:map<string,map<string,ll>> mp;

        mp[s1][s2]=1 首先创建一个包含s1作为键的内部映射,然后在对应的内部映射中插入一个键值对,其中键为s2,值为1

例: typedef struct
        {
            string s[15];
            ll cn;

            ll sum;
        }st;

        map<string,st> mp;

        mp[ip].cn=k;

        mp[ip].s[i]=user;

        for(auto &it:mp) //遍历 mp 中的每一个键值对,将键赋值给 it.first,将值赋值给 it.second
        {
                cout<<it.first<<" "<<it.second.sum;
                for(ll i=0;i<it.second.cn;i++)
                {
                    if(it.second.s[i]!=" ")
                        cout<<" "<<it.second.s[i];
                }
        }

例:typedef pair<string,string>pii;
       set<pii>st;

       st.insert({name,s1}); 将一个由names1组成的pair插入到st中。

例:

    typedef pair<long,long> pii;
    vector<pii> p;
    //for(pii at=make_pair(n-1,m-1);at!=pii{0,0};at=pre[at.fi][at.se])
    //for(pii at={n-1,m-1};at!=pii(0,0);at=pre[at.fi][at.se])
    //for(auto at=pii(n-1,m-1);at!=pii(0,0);at=pre[at.fi][at.se])
    //for(pii at={n-1,m-1};at!=pii{0,0};at=pre[at.fi][at.se])
    for(pii at={n-1,m-1};at!=make_pair(0LL,0LL);at=pre[at.fi][at.se])
    {
        p.push_back(at);
    }

如果直接用pii,0可以直接写0,因为pii已经定义为long long 

如果用make_pair( ),必须把0换为long long 也就是0LL

### C++ STL 中 `std::pair`、`std::map` 和 `std::set` 的用法 #### 使用 `std::pair` `std::pair` 是一种模板类,用于组合两个不同类型的对象。它通常用来作为其他容器中的元素。 ```cpp #include <iostream> #include <utility> // For std::pair int main() { // 创建 pair 对象 std::pair<int, double> p1(10, 3.14); // 访问成员 first 和 second std::cout << "First element: " << p1.first << ", Second element: " << p1.second << '\n'; } ``` #### 使用 `std::map` `std::map` 实现了一个关联数组的数据结构,键值对按照键自动排序。每个键都是唯一的。 ```cpp #include <iostream> #include <map> void printMap(const std::map<std::string, int>& m) { for (const auto& elem : m) { std::cout << "{" << elem.first << ": " << elem.second << "}\n"; } } int main() { // 定义 map 并插入一些元素 std::map<std::string, int> age_map; age_map["Alice"] = 25; age_map.insert(std::make_pair("Bob", 30)); // 查找特定 key 是否存在 if (age_map.find("Charlie") == age_map.end()) { std::cout << "Charlie not found.\n"; } // 遍历整个映射表 printMap(age_map); // 删除某个条目 age_map.erase("Alice"); printMap(age_map); } ``` #### 使用 `std::set` `std::set` 提供了一种有序集合的实现方式,不允许重复项。内部通过红黑树来维护顺序特性。 ```cpp #include <iostream> #include <set> void displaySetElements(const std::set<int>& s) { for (auto it = s.begin(); it != s.end(); ++it) std::cout << *it << ' '; std::cout << "\n"; } int main() { // 初始化 set std::set<int> numbers_set; // 插入新元素到 set 中 numbers_set.insert(7); numbers_set.emplace(3); numbers_set.insert({9, 5}); // 输出所有元素 displaySetElements(numbers_set); // 尝试再次添加已存在的元素不会改变原有状态 bool inserted = numbers_set.insert(7).second; std::cout << "Insertion of duplicate value returned: " << inserted << "\n"; // 移除指定元素 size_t removed_count = numbers_set.erase(3); std::cout << "Number of elements erased: " << removed_count << "\n"; // 展示最终结果 displaySetElements(numbers_set); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值