在struct的map上使用find(),get"没有名为XXX&#34的成员;

时间:2015-09-10 05:56:24

标签: c++ dictionary struct

我定义了一个结构,使用unsigned long long int作为在地图中存储结构的键。 我有另一个函数,它在地图中查找结构并对结构进行一些修改。

但是我得到了这样的错误:

‘struct std::_Rb_tree_iterator<std::pair<const long long unsigned int, sStatics> >’ has no member named Latency

任何人都可以告诉我错误来自哪里? 以下是我的代码结构:

A.H:

#include <map>

struct sStatics;
extern std::map<unsigned long long int, sStatics>  wsmStaticsMap;

A.cpp:

#include <map>

std::map<unsigned long long int, sStatics>  wsmStaticsMap;
struct sStatics
{
    std::string atcs;
    uint32_t Latency;
    std::vector<unsigned long int> lostWSM;
    unsigned long int wrongOrderCount;
};

static void function_statics(){

    std::map<unsigned long long int,sStatics>::iterator it;
    it = wsmStaticsMap.find(atcs);
    if (it != wsmStaticsMap.end()){
        it->Latency++;
    }

}

2 个答案:

答案 0 :(得分:1)

你必须写(it->second).Latency。它返回一个键值对。您需要先选择值,然后选择其中的属性。 您可以查看reference

答案 1 :(得分:0)

std::map::find返回

  

使用等效于键的键的元素的迭代器。如果没有找到这样的元素,则返回past-the-end(参见end())迭代器。

这是std::pair<Key, Value>,您需要使用->second来访问该值。

更改

it->Latency++;

(it->second).Latency++;

另外,使用auto来简化

auto it = wsmStaticsMap.find(atcs);