c++ - 在 C++ 中动态创建 vector 并添加到 map

标签 c++ pointers vector

假设我有一个问题陈述,我的函数接收一个字符串(所有字母表),并且我需要存储所有字母表的索引。例如

If input is aabbacd
then I need something like
a -> 0, 1, 4
b -> 2, 3
c -> 5
d -> 6

现在,我想创建一个 char 到 vector 的映射,但最终创建了一个 char 到 vector *的映射。

function(String s)
{
    map<char, vector<int> > m;
    for(i = 0; i < s.size(); i++)
    {
        if(m.find(s[i]) == m.end())
        {
            //create new vector and push 'i'
            vector<int>* v = new vector<int>(); // If I create a vector here, then that will only be live till the closing brace of the if
            .... // rest of the code

考虑到 c++ STL 已经处理了所有指针管理,我知道创建一个 vector * 并不是最好的选择。但在这种情况下我能做什么,以便在 if block 内创建的 vector 在外部也保持事件状态?

最佳答案

STL 容器按值保存元素,即,它复制您要使用的 vector 。所以你担心 vector 超出范围基本上是徒劳的。只需创建一个法线 vector 并将其移动到容器中即可。示例:

map<char, vector<int>> m;
for (std::size_t i = 0; i < s.size(); ++i) {
    vector<int> v;
    // populate v
    m.emplace(character, std::move(v));
    // now m holds its own *copy* of the vector
}

事实上,您似乎使这个过程过于复杂化了。它可以很简单:

map<char, vector<std::size_t>> m;
for (std::size_t i = 0; i < s.size(); ++i)
    m[s[i]].push_back(i);
return m;

感谢 cplusplusrat .

关于c++ - 在 C++ 中动态创建 vector 并添加到 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57343443/

相关文章:

c - 如何将结构的指针设置为 C 中的值?

在 C 中正确使用 free() 函数

c++ - 在默认构造函数中初始化 vector 变量?

c++ - Boost.几何 : How to create simple array of polygons and save tham as svg image?

c++: vector<Base> 可以包含 Derived 类型的对象吗?

c# - 从 C# 将资源嵌入到 native exe

c++ - C++程序中的段错误;难以理解的 valgrind 输出

C++ 模板 : overload operator +, 而返回类型由输入类型决定

c++ - 编译器认为我正在传递 std::ofstream*&,传递 std::ofstream*

c++ - 显式函数模板特化 - 为什么?