我想将代码从perl转换为c ++,我的问题是perl中的多键映射! 例如:
perl的:
$address{name}{familyName} = $someAddress;
并且键不是唯一的。 我想用c ++中的类似数据结构使用map或......! 我也想用第一个键搜索和获取值,例如我想在c ++中使用%keys {name}。
编辑:我想知道如果存在特殊姓名的姓氏,或者姓名和姓氏一起是关键而且唯一的不是每个姓名。
答案 0 :(得分:6)
与%keys{name}
完全等同于std::map
。您可以使用括号运算符来访问地图的元素。如果你要求一个尚未存在的密钥,它会方便地插入一个新的默认构造对象。您可以使用地图地图复制多键地图,例如std::map<std::string, std::map<std::string, std::string> >
。
如果您的密钥可能包含多个与之关联的值,请使用std::multimap
代替map
。
答案 1 :(得分:4)
你想要这样的东西:
#include <map>
#include <string>
struct Person {
Person( const std::string & n, const std::string & f )
: name( n ), family( f ) {}
bool operator<( const Person & p ) const {
if ( family < p.family ) return true;
else if ( family == p.family ) return name < p.name;
else return false;
}
std::string name;
std::string family;
};
int main() {
std::multimap <Person, std::string> amap;
amap.insert(
std::make_pair( Person( "fred", "bloggs" ), "somewhere")
);
// alternate, though semantically somewhat different syntax
amap[ Person( "fred", "bloggs" ) ] = "new address";
}
答案 2 :(得分:3)
如果密钥不是唯一的,则必须使用std::multimap
,而不是std::map
。键的唯一性正是这两者之间的区别。