std :: map包含自定义对象和重复项

时间:2016-10-11 14:35:29

标签: c++

为什么以下代码会打印1

#include <iostream>
#include <map>
#include <string>
#include <utility>

struct Foo
{
  Foo(int bar, const std::string& baz)
    : bar(bar)
    , baz(baz)
  {}

  int bar;
  std::string baz;

  bool operator<(const Foo& rhs) const
  {
    if (bar < rhs.bar && baz < rhs.baz)
    {
      return true;
    }
    else
    {
      return false;
    }
  }
};

int main()
{
    Foo first(0, "test");
    Foo second(1, "test");
    std::map<Foo, std::string> m;
    m.insert(std::make_pair(first, "test"));
    m.insert(std::make_pair(second, "test1"));
    std::cout << m.size() << std::endl;
}

insert的第二次调用表示我们已在地图中拥有该项目。为什么呢?

2 个答案:

答案 0 :(得分:0)

如果密钥已经存在于地图中,则

insert不会执行任何操作。

答案 1 :(得分:0)

  

第二次插入调用表示我们已经在地图中拥有该项目。为什么呢?

因为first已经在地图中。这正是地图的用途:检查地图中的键是否正确,这正是错误所说的。