我需要建议如何使用string
和set<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);
}
有人可以帮助我吗?提前谢谢。
答案 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;
}