标签: stdmap

在std :: pair中使用数组来扩展数据量

我正在尝试扩展别人的代码,它经常使用std :: queue和std :: pair类型.对于下面的代码,我需要扩展std :: pair.second中的变量数量,并希望它对于像数组这样的变量数量更加灵活(以便将来修改).

someClass->myQueue.push(std::pair<T1,uint64_t>(var1, var2));
Run Code Online (Sandbox Code Playgroud)

所以我尝试做类似的事情:

someClass->myQueue.push(std::pair<T1,uint64_t[N]>(var1,{e1,e2,...,eN}));
Run Code Online (Sandbox Code Playgroud)

在修改代码中的相关定义等后,我得到了以下错误和警告,我对此一无所知.然而,听起来这不是进行这种修改的适当方式.

myArray = myQueue.front().second; 
        ^
error: invalid array assignment
...
someClass->myQueue.push(std::pair<T1,uint64_t[N]>(var1,{e1,e2,...,eN}));
                                                                    ^
warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
Run Code Online (Sandbox Code Playgroud)

我在网上看到了元组和std :: pair作为解决方案的递归用法,但我想对代码进行最小的更改,因为几个类将受此影响.这样做的正确方法是什么?

谢谢

c++ stdmap std c++11 std-pair

0
推荐指数
1
解决办法
101
查看次数

`[]`运算符导致地图上的编译错误

我试图从for循环中的地图中获取一个元素.按照cppreference的例子我试试这个:

#include <iostream>
#include <map>

using namespace std;

int main()
{
    map<int, int> mapping;

    mapping.insert(pair<int, int>(11,1));
    mapping.insert(pair<int, int>(12,2));
    mapping.insert(pair<int, int>(13,3));

    for (const auto &it : mapping)
        mapping[it]++;


    cout << "array: ";
    for (const auto &it : mapping)
        cout << it.second << " ";

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这给出了gcc的以下编译错误:

main.cpp: In function 'int main()':
main.cpp:15:16: error: no match for 'operator[]' (operand types are 'std::map<int, int>' and 'const std::pair<const int, int>')
         mapping[it]++;
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,问题是auto解决了std::pair<const int, int>没有[]定义运算符的问题.我想知道是否有办法让这个工作. …

c++ stdmap c++11

0
推荐指数
1
解决办法
50
查看次数

c ++ std map的擦除函数是否释放了指针键的内存?

在我的应用程序中,我使用c ++ std map和char*作为键.下面是使用迭代器从映射中删除数据条目的代码示例.

// map declaration in the code
map<VcmU8T*, time_t, DataMapStrCmpT> mDataMap;

auto it = mDataMap.find(apKey);
if (it != mDataMap.end()) {
    mDataMap.erase(it);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码是否清除(释放)键指针的内存?

c++ stdmap c++11

0
推荐指数
1
解决办法
665
查看次数

是否可以简化迭代std映射的代码?

所以我有这个定义:

using HistoryDataItemList = list<CHistoryDataItem>;
HistoryDataItemList m_listHistoryItems;
Run Code Online (Sandbox Code Playgroud)

而这种方法:

bool CHistoryData::HasHistoryForAssignment(ASSIGN_TYPE_E eAssignType)
{
    bool bHasHistoryForAssignment = false;
    auto iter = m_listHistoryItems.begin();

    for (; iter != m_listHistoryItems.end(); iter++)
    {
        if (iter->GetAssignmentType() == eAssignType)
        {
            bHasHistoryForAssignment = true;
            break;
        }
    }

    return bHasHistoryForAssignment;
}
Run Code Online (Sandbox Code Playgroud)

我知道使用像C#这样的语言可以简化代码,但是在使用较新的C++ 11时,还可以使用MFC吗?或者我所写的内容非常简单?

谢谢.

mfc stdmap c++11

0
推荐指数
1
解决办法
46
查看次数

删除 std::map 的函数

我正在尝试删除以下地图:

typedef bool (myClass::*func)(std::vector<std::string> &args);
typedef std::map<std::string, func> myMap;
myMap map; //map of functions in the class 'myClass'

void deleteMap()
{
    for(myMap::iterator it = map.begin(); it != map.end(); ++it)
    {
        delete it->second; //compiler says it->second is non-pointer type
        map.erase(it);
    }
}
Run Code Online (Sandbox Code Playgroud)

'map' 将字符串映射到类 'myClass' 中的函数,该函数在其参数中采用字符串向量。

在我尝试删除此映射时,我试图删除指向成员函数的指针,然后擦除迭代器本身。编译器说 it->second 必须是指针类型。在 typdef 'func' 是一个指向 myClass:: 的指针,那么为什么我会收到这个错误?

这是删除函数映射的合适方法吗?

c++ pointers stl stdmap std

0
推荐指数
1
解决办法
1112
查看次数

在 std::map 中替换现有条目并添加新条目

考虑以下片段:

MapT map;

map["A"] = 1;
map["B"] = 2;
map["C"] = 3;
map["D"] = 4;
map["E"] = 5;

MapT mapSecond;

mapSecond["A"] = 10;
mapSecond["B"] = 20;
mapSecond["C"] = 30;
mapSecond["X"] = 4;
mapSecond["Y"] = 5;

MapT::const_iterator itSecond = mapSecond.begin();
MapT::iterator it = map.begin();

for (; itSecond != mapSecond.end(); ++itSecond)
{
    std::pair<MapT::iterator, bool> pair = map.insert(std::make_pair(itSecond->first, itSecond->second));
    if (!pair.second)
    {
        pair.first->second = itSecond->second;
    }
}

for (; it != map.end(); ++it)
{
    std::cout << it->first << " " << it->second << …
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl stdmap

0
推荐指数
1
解决办法
3629
查看次数

在方法中填充的地图的shared_ptr在调用者中返回空

我正在初始化一个shared_ptr以映射到一个名为GetData的单独函数中.此映射作为参数传递给GetData函数.但是,在main中,map在调用GetData函数后返回空.

#include <memory>
#include <map>

void  GetData(std::shared_ptr<std::map<int, int>> data);

int main()
{
    std::shared_ptr<std::map<int, int>> data2 = std::make_shared<std::map<int, int>>();
    GetData(data2);
    return 0;
}

void GetData(std::shared_ptr<std::map<int, int>> data)
{

    data = std::make_shared<std::map<int, int>>
        (std::initializer_list<std::map<int, int>::value_type>{
            { 1, 2 },
            { 5, 6 },
            { 4, 5 }
    });
}
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

更新: 如果在参数仍未通过引用传递的情况下重写方法如下,我确实在调用GetData方法后在main中填充了map.

void GetData(std::shared_ptr<std::map<int, int>> data)
{
    data->insert(std::pair<int, int>(1,2));
    data->insert(std::pair<int, int>(45, 2));
}
Run Code Online (Sandbox Code Playgroud)

c++ stdmap shared-ptr c++14

0
推荐指数
1
解决办法
314
查看次数

使用std :: map const_iterator更改/更新值

我只是想知道我是否可以使用const_iterator更改/更新地图的值。

下面是代码片段:

int main()
{
    map <int, int> m;
    m.insert(make_pair(1, 10));

    map <int, int>::const_iterator itr = m.begin(); //The iterator is const_iterator
    itr->second = 30;

    cout << itr->second; //The value to be printed is 30, and not 10.
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

预先感谢您分享您的想法。

c++ stl stdmap const-iterator

0
推荐指数
1
解决办法
111
查看次数

比较2个大小不等的地图c ++

我有 2 张不同大小的地图(字符串、字符串)。我需要比较并返回地图中存在的不同项目。

eg: map1 contains
"1":"abc"
"2":"xyz"
"3":"abc"
eg: map2 contains
"1":"abcd"
"2":"xyz"
"4":"abc"
"5":"abc"
Run Code Online (Sandbox Code Playgroud)

如果比较 2 张地图,则只匹配“2”。剩下的无可匹敌。我需要把所有无与伦比的东西都放到另一张地图上。

c++ stdmap c++17

0
推荐指数
1
解决办法
111
查看次数

C++ 地图容器erase() 分段错误

我使用此代码从地图容器中删除等于某个 int 的元素。

for(auto x:m){
  if((x.second)==element)m.erase(x.first);
}
Run Code Online (Sandbox Code Playgroud)

结果是分段错误。我也试过这个:

for(map<int,int>::iterator i=m.begin();i!=m.end();i++){
  if((i->second)==element)m.erase(i);
}
Run Code Online (Sandbox Code Playgroud)

结果一样。如果将 i++ 放入 if/else 程序将冻结/循环或其他什么。我怎样才能解决这个问题?

c++ stdmap

0
推荐指数
1
解决办法
225
查看次数

标签 统计

stdmap ×10

c++ ×9

c++11 ×4

stl ×3

std ×2

c++14 ×1

c++17 ×1

const-iterator ×1

iterator ×1

mfc ×1

pointers ×1

shared-ptr ×1

std-pair ×1