1

我有以下数据类型

typedef     std::map <std::string.std::string> leaf; 
typedef     std::map <std::string,leaf> child;
typedef     std::vector<child> parent;

现在,如果我想访问索引 0 处的父元素和具有键“x”的子元素,然后对其值执行一些操作

第一种方法是:

    parentobject[0]["x"]["r"]

但是每次我想要访问该值时都需要重复这些索引。

第二种方法是: std::string value=parentobject[0]["x"]["r"] 然后使用值对象。但是这种方法的问题是这一行将创建字符串的副本。

有没有更好的方法来访问变量而不创建副本?

4

2 回答 2

2

使用参考:

const std::string& value = parentobject[0]["x"]["r"];

现在您可以参考value您喜欢的任何地方(在同一块范围内),而无需再次执行地图查找。

const如果您确实需要,请删除。

请购买并阅读其中一以了解 C++ 的基本特性。

于 2012-12-15T20:30:39.173 回答
2

您可以使用参考来避免复制:

std::string & value = parentobject[x][y][z]; 

或者,您是否可以这样做:

//define a lambda in the scope
auto get =  [] (int x, std::string const & y, std::string const & z) 
      -> std::string &
{
    return parentobject[x][y][z];
}

//then use it as many times as you want in the scope
std::string & value = get(0, "x", "r");

get(1, "y", "s") = "modify";
于 2012-12-15T20:29:25.483 回答