如何将数据插入map <string,set <string =“”>&gt; C ++?</串,>

时间:2014-03-14 21:49:51

标签: c++ string map

我需要建议如何使用stringset<string>将数据插入到地图中。我试过这样的东西,但它不起作用:

#include <map>
#include <utility>

int main()
{      
  std::map<string, set<string> > mymap;
  std::map<string, set<string> >::iterator it = mymap.begin(); 

  mymap.insert ( std::pair<string, set<string> > ("car" , "orange") );
  return (0);
}

有人可以帮助我吗?提前谢谢。

4 个答案:

答案 0 :(得分:4)

两种方法:

set<string> myset;
myset.insert("orange");

//first method
mymap["car"] = myset; //will overwrite existing data!!

//second method
mymap.insert(make_pair("car", myset));

答案 1 :(得分:3)

我不知道为什么现在看起来如此受欢迎以避免operator[]地图,它比insert更优雅。当然,除非稍有差异(例如需要默认构造函数)导致它不适合您,或者您已确定它导致性能问题。出于您的目的,正如您所描述的那样,它应该可以正常工作。

mymap["car"].insert("orange");

如果它已经存在,它将构造该集合,并且它将向其中插入一个元素。在评论中,您已表示希望在集合中添加更多元素,并且您可以使用完全相同的语法。

mymap["car"].insert("blue");

如果您想在插入前确保有一个空的空集,您可以随时在其上调用clear()

auto & car_set = mymap["car"];
car_set.clear();
car_set.insert("orange");

答案 2 :(得分:2)

#include <map>
#include <set>
#include <string>

int main() {
    std::map< std::string, std::set< std::string> > mymap;
    std::set< std::string> s;
    s.insert( "orange");
    mymap.insert( std::make_pair( std::string("car") , s));
    return 0;
}

向现有std::set添加新元素:

//add string to set identified by key "car"
if ( mymap.find( "car") != mymap.end()) {
    std::set< std::string>& s_ref = mymap[ "car"];
    s_ref.insert( "blue");
}

请检查此online example

答案 3 :(得分:1)

#include <map> 
#include <set>
#include <string>
#include <iostream>

using namespace std;

void insertValue(map<string, set<string> >& myMap,
                 string const& key,
                 string const& value)
{
   // Check whether there is already a set given the key.
   // If so, insert to the existing set.
   // Otherwise, create a set and add it to the map.
   map<string, set<string> >::iterator found = myMap.find(key);
   if ( found != myMap.end() )
   {
      cout << "Adding '" << value << "' to an existing set of " << key << "s.\n";
      found->second.insert(value);
   }
   else
   {
      cout << "Adding '" << value << "' to a new set of " << key << "s.\n";
      set<string> temp;
      temp.insert(value);
      myMap.insert(make_pair(key, temp));
   }
}

int main()
{
   map<string, set<string> > mymap;
   insertValue(mymap, "car", "orange");
   insertValue(mymap, "car", "blue");
   insertValue(mymap, "car", "red");
   insertValue(mymap, "truck", "orange");
   insertValue(mymap, "truck", "blue");
   return 0;
}