使用带结构的地图作为键 - 值不保存

时间:2014-04-06 08:33:17

标签: c++ stdmap

我对c ++ std :: map容器和结构作为键没什么问题。

我想使用map作为ipv6查找表的快速查找表。我有IP地址的文件,我想要聚合它们。

我的地图密钥是

struct myipv6{
uint64_t MSB;
uint64_t LSB;

bool operator==(const myipv6 &a){
            return (MSB == a.MSB && LSB == a.LSB);
}

bool operator<(const myipv6 &a){
                return (MSB < a.MSB && LSB < a.LSB);
}
myipv6(){}
myipv6(const uint64_t A,const uint64_t B) :
    MSB(A),LSB(B) {}
};

bool operator < (const myipv6 &l, const myipv6 &r) { return ( l.MSB < r.MSB && l.LSB < r.LSB); }

通过

从in6_addr插入数据
memcpy(&(ip), &src_addr, sizeof(myipv6));

这个施工工作,我试着将数据复制到ip。从ip使用memcpy到另一个in6_addr并使用inet_pton来检查值是否正确。

地图声明为

map<myipv6, int> aggregate;
map<myipv6, int>::iterator it;

当我浏览文件中的所有IP地址并将其用于聚合时:

    it = aggregate.find(ip);
    if(!(ip == it->second.ip)){
            aggregate[ip] = 1;
    }else{
            it->second += 1;
    }

我得到不好的结果,记录丢失了...当我使用它== aggregate.end()而不是!(ip == it-&gt; second.ip)for else语句中的条件我得到它 - &gt;首先不等于ip。 但是当我使用!(ip == it-&gt; second.ip)时,迭代器有任何值,当我写&#34; new&#34;要映射的项目我重写保存的数据。

这种奇怪的行为有什么问题吗?

最后一个问题,是否可以使用unordered_map而不是map?

谢谢

0 个答案:

没有答案