std :: map的奇怪行为

特哈斯

我有一个

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()在仅对2个元素进行迭代时显示12吗?

毫米

将比较功能更改为

bool operator<(const a &o) const
{
    if ( c == o.c )
         return d < o.d;

    return c < o.c; 
}

请注意,使其成为非成员函数通常更有用。

您的比较功能必须遵循以下规则:

如果我们将定义equiv(a, b)!comp(a, b) && !comp(b, a),则要求comp和equiv均为传递关系:

-comp(a, b) && comp(b, c)暗示comp(a, c)

-equiv(a, b) && equiv(b, c)暗示equiv(a, c)

映射使用比较函数生成其数据结构并对其进行迭代,因此,如果您的函数错误,则可能会发生任何事情。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

std :: map的奇怪行为

来自分类Dev

STD Map clear()奇怪的行为

来自分类Dev

使用std map和shared_ptr的奇怪内存行为

来自分类Dev

使用std map和shared_ptr的奇怪内存行为

来自分类Dev

std :: function的奇怪行为

来自分类Dev

std :: vector的奇怪行为

来自分类Dev

std :: async的奇怪行为

来自分类Dev

std::cout 的奇怪行为

来自分类Dev

std :: string与unicode的奇怪行为

来自分类Dev

std :: vector <string>奇怪的行为

来自分类Dev

使用自定义结构作为键类型访问std :: map会导致奇怪的行为

来自分类Dev

C 11 std ::线程奇怪的行为

来自分类Dev

std :: cout在C ++中的奇怪行为

来自分类Dev

C ++ 11 std :: thread奇怪的行为

来自分类Dev

std :: unique_ptr和std :: ostringstream(SIGSEGV)的奇怪行为

来自分类Dev

Java Map 奇怪的行为

来自分类Dev

带有std :: experimental :: is_detected的奇怪MSVC行为

来自分类Dev

使用'auto'和std :: minmax观察奇怪的行为

来自分类Dev

带有std :: initializer_list的奇怪行为constexpr

来自分类Dev

std :: string作为成员函数的参数的奇怪行为

来自分类Dev

在带有std :: ref的std :: thread中调用带有地址清理的std :: invoke(std :: forward(...))时发生奇怪的行为

来自分类Dev

std :: ifstream的行为很奇怪,临时std :: string()作为构造函数参数

来自分类Dev

带有俄文文本的 std::map 中的奇怪顺序

来自分类Dev

如果KEY是std :: list或std :: vector而不是值,则std :: map的默认行为是什么?

来自分类Dev

这是适当的行为吗?std :: map迭代器无效

来自分类Dev

我不明白奇怪的std :: atomic_short.load()行为

来自分类Dev

io_context或std :: cout在多线程UDP服务器中的奇怪行为

来自分类Dev

MSVC 2015中带有从std :: async抛出异常的奇怪行为

来自分类Dev

std::ofstream 在 256 字节边界上写入整数时的奇怪行为

Related 相关文章

  1. 1

    std :: map的奇怪行为

  2. 2

    STD Map clear()奇怪的行为

  3. 3

    使用std map和shared_ptr的奇怪内存行为

  4. 4

    使用std map和shared_ptr的奇怪内存行为

  5. 5

    std :: function的奇怪行为

  6. 6

    std :: vector的奇怪行为

  7. 7

    std :: async的奇怪行为

  8. 8

    std::cout 的奇怪行为

  9. 9

    std :: string与unicode的奇怪行为

  10. 10

    std :: vector <string>奇怪的行为

  11. 11

    使用自定义结构作为键类型访问std :: map会导致奇怪的行为

  12. 12

    C 11 std ::线程奇怪的行为

  13. 13

    std :: cout在C ++中的奇怪行为

  14. 14

    C ++ 11 std :: thread奇怪的行为

  15. 15

    std :: unique_ptr和std :: ostringstream(SIGSEGV)的奇怪行为

  16. 16

    Java Map 奇怪的行为

  17. 17

    带有std :: experimental :: is_detected的奇怪MSVC行为

  18. 18

    使用'auto'和std :: minmax观察奇怪的行为

  19. 19

    带有std :: initializer_list的奇怪行为constexpr

  20. 20

    std :: string作为成员函数的参数的奇怪行为

  21. 21

    在带有std :: ref的std :: thread中调用带有地址清理的std :: invoke(std :: forward(...))时发生奇怪的行为

  22. 22

    std :: ifstream的行为很奇怪,临时std :: string()作为构造函数参数

  23. 23

    带有俄文文本的 std::map 中的奇怪顺序

  24. 24

    如果KEY是std :: list或std :: vector而不是值,则std :: map的默认行为是什么?

  25. 25

    这是适当的行为吗?std :: map迭代器无效

  26. 26

    我不明白奇怪的std :: atomic_short.load()行为

  27. 27

    io_context或std :: cout在多线程UDP服务器中的奇怪行为

  28. 28

    MSVC 2015中带有从std :: async抛出异常的奇怪行为

  29. 29

    std::ofstream 在 256 字节边界上写入整数时的奇怪行为

热门标签

归档