【发布时间】:2017-08-19 08:53:04
【问题描述】:
假设我们有一张带有int 和一组strings 的地图
std::map < int , std::set<std::string> > myString;
1=> "set1"
1=> "set2"
2=> "set1"
2=> "set2"
现在,是否可以将上述集合的每个唯一值设为映射键
粗略地说,数据就像
1=>
set1=> "Hello"
set1=> "Hey"
set1=> "Wow"
1=>
set2=> "Hello"
set2=> "Hey"
set2=> "Wow"
2=>
set1=> "Hello"
set1=> "Hey"
set1=> "Wow"
2=>
set2=> "Hello"
set2=> "Hey"
set2=> "Wow"
简单来说,我正在尝试设计一个映射,它有一个指向字符串集的整数键,并且每个字符串又有多个值,因此我认为一组字符串作为一个纯字符串到整数会覆盖这些值我们将只有一个最终值。
我认为下面的语法不能解决问题:
std::map < std::set<std::string>, std::string > myString;
您的建议将非常有帮助,因为我正在尝试将更大的问题分解为简短的内容,并将加入所有这些子问题。
对不起,如果我的解释不好且令人困惑。 这是我尝试过的代码
#include <map>
#include <iostream>
#include <string>
#include <vector>
#include <set>
struct values
{
std::string a;
std::string b;
values():a("milepost"),b("dummyval"){};
values( std::string ab, std::string bc)
{
a=ab;
b=bc;
};
bool operator<(const values& other) const { return a< other.a;}
};
int main(int argc, const char * argv[]) {
//Create set of types firstly
std::set<std::string> types ;
types.insert("et");
types.insert("pt");
typedef std::map< int,std::set<std::string> > myGroupsMap;
typedef std::map<std::string,values> myWsData;
typedef std::map< std::string , std::set<myWsData> > myFinalData;
typedef std::map< int,std::set<myFinalData> > myGroupData;
//Create the group with all types in each of them
// groupname type
// 1 et
// 2 et
// 1 pt
// 2 pt
myGroupsMap groupTypeMap;
groupTypeMap.insert(std::make_pair(1, types) );
groupTypeMap.insert(std::make_pair(2, types) );
groupTypeMap.insert(std::make_pair(3, types) );
groupTypeMap.insert(std::make_pair(4, types) );
groupTypeMap.insert(std::make_pair(5, types) );
//Create the object of structure
values a,b,c;
//Create map and insert the string and its corresponding structure
myWsData et_Data1,pt_Data2;
et_Data1.insert(std::make_pair("780256", a));
et_Data1.insert(std::make_pair("780255", b));
et_Data1.insert(std::make_pair("780254", c));
pt_Data2.insert(std::make_pair("780256", a));
pt_Data2.insert(std::make_pair("780255", b));
pt_Data2.insert(std::make_pair("780254", c));
std::set<myWsData> myet_pt_data;
myet_pt_data.insert(et_Data1);
myet_pt_data.insert(pt_Data2);
myFinalData fd , fd1 , fd2 ;
fd.insert(std::make_pair ("ET",myet_pt_data) );
fd.insert(std::make_pair ("PT",myet_pt_data) );
fd1.insert(std::make_pair ("ET",myet_pt_data) );
fd1.insert(std::make_pair ("PT",myet_pt_data) );
fd2.insert(std::make_pair ("ET",myet_pt_data) );
fd2.insert(std::make_pair ("PT",myet_pt_data) );
std::set<myFinalData> mfd;
mfd.insert(fd);
mfd.insert(fd1);
mfd.insert(fd2);
myGroupData mygd;
mygd.insert(std::make_pair (1,mfd) );
mygd.insert(std::make_pair (2,mfd) );
mygd.insert(std::make_pair (3,mfd) );
return 0;
}
谢谢。 光辉
【问题讨论】:
-
地图中不能有两个具有相同键的元素,例如 "1=> "set1",1=> "set2",2=> "set1",2=> "set2 "" 不是地图
-
根据 example ,可以使用 map 和 key 1 可以同时具有值 set1 和 set2 。我的问题是让这个值集的每个值都充当映射键 std::map
> -
每个键肯定可以有很多元素,诀窍是 std::set
-
您的问题根本不清楚,但这是在黑暗中刺伤。也许您想要的是 2 张单独的地图。 1)
map<int, set<string>>和 2)map<string, SomeStruct>-- 其中包含在第一个映射集合中的字符串用作第二个映射的键。这有意义吗?它是否可能适用于您要解决的问题?老实说,我不知道是不是这样,因为就像我说的,你的问题很不清楚。 -
这看起来是个 XY 问题。您能描述一下您要解决的真正问题吗?