I have a
std::map<a,std::vector<b>> m;
a是一个结构体
struct a
{
std::string c,d;
bool operator<(const a &o)
{ return !(c==o.c && d==o.d);}
}
我将以如下方式填充地图:
for(/*blah blah*/)
{
m[A].push_back(B)
}
并在填写后打印一些东西。
std::cout << "Size:" << m.size() << std::endl;
int i=0;
for(std::map<a,std::vector<b>>::iterator it = m.begin(); it != m.end();i++,it++)
{
std::cout << "[" <<i <<"] " << it->second.size() << std::endl;
}
我正在收到的输出是:
Size: 12
[0] 1
[1] 3
有人能解释一下为什么 map::size() 显示为 12 ,而实际只迭代了 2 个元素吗?
d==0.d
- 这里的d
是零,不是字母o
。你真的在展示你的实际代码吗? - lethal-guitaroperator<
用于此目的。你的实现完全破坏了map
的契约(期望)。在你的实现中,a < b == b < a
。一个可用的operator<
应该足以对键进行排序。 - Adam