将带有多个键的perl映射转换为c ++

时间:2010-03-15 13:07:14

标签: c++ perl map

我想将代码从perl转换为c ++,我的问题是perl中的多键映射! 例如:

perl的:

$address{name}{familyName} = $someAddress;

并且键不是唯一的。 我想用c ++中的类似数据结构使用map或......! 我也想用第一个键搜索和获取值,例如我想在c ++中使用%keys {name}。

编辑:我想知道如果存在特殊姓名的姓氏,或者姓名和姓氏一起是关键而且唯一的不是每个姓名。

3 个答案:

答案 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。键的唯一性正是这两者之间的区别。