代码之家  ›  专栏  ›  技术社区  ›  Sasha

将包含集的映射用作值

  •  1
  • Sasha  · 技术社区  · 15 年前

    基本上我有,

    typedef  map<std::string, set<double> > MAP_STRING_TO_SET;
    

    用新值更新(添加或删除值)集合而不复制集合的最佳方法是什么?

    我看到的唯一可行的解决方案是 map<std::string, set<double>* > --我不想做的事。

    谢谢

    3 回复  |  直到 14 年前
        1
  •  13
  •   rlbond    15 年前

    仅在初始化时复制集。 你可以做类似的事情

    myMap[myString].insert(myDouble);
    

    因为map::operator[]返回引用。

        2
  •  0
  •   Naveen    15 年前

    您也可以这样做:

    map<std::string, set<double> >::iterator iter = myMap.find(myString);
    if(iter != myMap.end())
    {
     iter->second.insert(myDouble);
    }
    
        3
  •  -1
  •   jpalecek    14 年前

    我想你可以用交换。

    my_map["123"].swap(my_set)
    

    提供击打 my_set 对你来说无关紧要。这将交换 my_map["123"] 具有 MyoSET 而且速度很快。

    索引运算符[]返回对所包含的 set -因此,您可以像处理任何其他变量一样处理它。如果要添加/删除单个值,只需使用 insert() erase() 方法-例如 my_map["123"].insert(123) .

    当你给地图分配一个新的集合时,复制实际上发生了。

    my_map["123"]=my_set
    

    将创建的副本 MyoSET . 如果你不需要使用 MyoSET 稍后,您可以使用 swap() 方法,它只对两个集的指针进行随机移动。 MyoSET 但是,将具有前一个的内容 MyAlpM[[ 123 ] ] .