C++MAP和vector的用法

本文通过示例展示了如何使用C++标准库中的容器类型,包括向量(vector)、映射(map)和列表(list),涉及元素插入、删除及遍历等基本操作。
部署运行你感兴趣的模型镜像

// listTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


#include "stdio.h"
#pragma warning(disable:4786)

#include <vector>
#include <map>
#include <list>
using namespace std;

int main(int argc, char* argv[])
{
 vector<int> m_intvc;
    vector<int>::iterator it;
    m_intvc.push_back(3);
    m_intvc.push_back(4);
    m_intvc.push_back(5);
    for (it = m_intvc.begin(); it != m_intvc.end(); it++)
    {
        if (*it == 4)
        {
            m_intvc.erase(it);
        }
    }
    printf("m_intvc size is %d/n",m_intvc.size());

    for (int i= 0; i < m_intvc.size(); i++)
    {
        printf("m_intvc[%d] is %d/r/n", i, m_intvc[i]);
    }

    map<int, char *> m_charmap;
    map<int, char *>::iterator itmap;
    //pair<map<int, char *>::iterator, bool> ret;
   
    m_charmap[2]= "lvhaipeng/n";
    m_charmap[3]= "liliwei/n";
    m_charmap[1]= "lichenyang/n";

    printf("m_charmap size is %d/n",m_charmap.size());
   
    itmap = m_charmap.find(3);
   
    if (itmap != m_charmap.end())
    {
        m_charmap.erase(itmap);
    }

    printf("m_charmap size is %d/n",m_charmap.size());
   
    m_charmap.insert(pair<int, char *>(4, "liqinsheng/n"));
    m_charmap.insert(pair<int, char *>(5, "hexiulan/n"));
    m_charmap.insert(pair<int, char *>(6, "liliwei/n"));

    for (itmap = m_charmap.begin(); itmap != m_charmap.end(); itmap++)
    {
        printf("m_charmap[%d] is %s", itmap->first, itmap->second);
    }
       
    list<int> m_listtemp;
    list<int>::iterator listit;
    m_listtemp.push_back(12);
    m_listtemp.push_back(15);
    m_listtemp.push_back(14);

    for (listit = m_listtemp.begin(); listit != m_listtemp.end(); listit++)
    {
        printf("m_listtemp is %d", *listit);
    }
 return 0;

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 将 C++ 中的 `map` 转换为 `vector` 在 C++ 中,可以将 `std::map` 或其变体(如 `multimap` `unordered_map`)转换为 `std::vector`。由于 `map` 的键值对存储形式是 `(key, value)` 对,因此可以通过迭代器将其逐个复制到 `vector` 中。 以下是实现此功能的具体方法: #### 方法一:直接拷贝整个 `map` 如果希望保留完整的键值对,则可以创建一个由 `pair<KeyType, ValueType>` 组成的 `vector` 并使用标准库算法完成转换[^1]。 ```cpp #include <iostream> #include <map> #include <vector> #include <algorithm> int main() { std::map<int, std::string> myMap = {{1, "one"}, {2, "two"}, {3, "three"}}; // 创建用于保存 map 键值对的 vector std::vector<std::pair<const int, std::string>> vec(myMap.begin(), myMap.end()); // 输出验证 for (const auto& pair : vec) { std::cout << "{" << pair.first << ", " << pair.second << "}\n"; } return 0; } ``` 在此代码中,`myMap.begin()` 到 `myMap.end()` 表示从头至尾遍历 `map` 容器内的所有元素,并将其逐一插入到新构建的 `vector<pair<...>>` 中[^1]。 --- #### 方法二:仅提取键或值 有时可能只需要获取 `map` 的键集合或值集合而不需要全部键值对,在这种情况下可分别处理如下所示[^2]: ##### 提取所有的 key 至 vector ```cpp #include <iostream> #include <map> #include <vector> int main() { std::map<int, std::string> myMap = {{1, "one"}, {2, "two"}, {3, "three"}}; // 使用 reserve 预分配空间提高效率 std::vector<int> keys; keys.reserve(myMap.size()); for (const auto& entry : myMap) { keys.push_back(entry.first); } // 打印结果 for (const auto& key : keys) { std::cout << key << "\n"; } return 0; } ``` 此处循环访问了每一个条目并单独记录下它们各自的 first 成员即代表各个映射关系里的唯一标识符部分[^2]. ##### 提取所有的 value 至 vector 同样也可以只收集对应的字符串表示作为目标容器的内容: ```cpp #include <iostream> #include <map> #include <vector> int main() { std::map<int, std::string> myMap = {{1, "one"}, {2, "two"}, {3, "three"}}; std::vector<std::string> values; values.reserve(myMap.size()); for (const auto& entry : myMap){ values.emplace_back(entry.second); } for(auto const &value:values){ std::cout<<value<<"\n"; } return 0 ; } ``` 这里我们采用 emplace_back 来代替 push_back ,因为前者通常更高效一些当涉及到对象构造时[^2]. --- #### 注意事项 需要注意的是,尽管上面的方法适用于大多数场景,但在某些特殊需求下还需要考虑额外的因素比如线程安全等问题以及性能优化等方面[^3]. 此外对于 unordered_map 类型来说它的内部结构不同于普通的红黑树实现所以可能会有不同的表现特性也值得注意.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值