如何将数据插入地图<字符串,设置<string>> C++?

How to insert data into map<string, set<string> > C++?

本文关键字:gt lt string 设置 C++ 字符串 地图 数据 插入      更新时间:2023-10-16

我需要关于如何使用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);
}

有人能帮我吗?提前谢谢。

我不知道为什么现在地图上不使用operator[]看起来如此流行,它比insert优雅得多。当然,除非这些细微的差异(例如对默认构造函数的需要(导致它不适合您,或者您已经确定它会导致性能问题。就您的目的而言,正如您所描述的,它应该可以正常工作。

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

如果集合还不存在,这将构造集合,并在其中插入一个元素。在注释中,您表示希望向集合中添加更多元素,并且可以使用完全相同的语法。

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

如果你想在插入之前确保你有一个新的、空的集合,你可以随时在上面调用clear()

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

两种方法:

set<string> myset;
myset.insert("orange");
//first method
mymap["car"] = myset; //will overwrite existing data!!
//second method
mymap.insert(make_pair("car", myset));
#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");
}

请查看这个在线示例。

#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;
}