gpt4 book ai didi

c++ - Map数据结构困惑的Map

转载 作者:行者123 更新时间:2023-11-30 02:55:38 24 4
gpt4 key购买 nike

我正在尝试在 C++ 中设置 map 结构的 map ,但无法使其按预期工作。我把这个示例程序放在一起来说明这个问题。如果看起来很复杂,请原谅我的困惑,但我想尽可能地保留这个案子。

所以当前打印出来的是:L1, size = 0我期待的是这样的:

L1, size 1
L2, 4

二级 map 似乎正确建立,可能是范围界定问题,但我不太明白。程序如下:

// So the map is
// AKEY -> { BKEY -> [ SegPair, SegPair .... ] }

#include <map>
#include <utility>
#include <iostream>
#include <vector>

typedef std::string AKEY;
typedef std::string BKEY;

typedef std::pair<int,int> SegPair;
typedef std::vector<SegPair> SegVec;
typedef std::map<BKEY, SegVec> Ensemble;
typedef std::map<AKEY, Ensemble> Oracle;

using std::string;

Oracle o = Oracle();

void setup(string akey, string bkey, int x, int y) {
auto pos = o.find(akey);
if (pos == o.end()) {
o[akey] = Ensemble();
}

Ensemble e = o[akey];

auto pos2 = e.find(bkey);
if (pos2 == e.end()) {
e[bkey] = SegVec();
}

SegPair p(x, y);
e[bkey].push_back(p);
}

int main(void) {

setup("L1", "L2", 3, 4);

for (auto it = o.begin(); it != o.end(); it++) {
std::cout << it->first;
Ensemble e = it->second;
std::cout << ", size = " << e.size() << "\n";
for (auto it2 = e.begin(); it2 != e.end(); it2++) {
std::cout << "\t" << it2-> first << "\n";
SegVec v = it2->second;
for (int i = 0; i < v.size(); i++)
std::cout<< v[i].second << " ";
}
}
}

最佳答案

我认为您的问题出在这一行:

Ensemble e = o[akey];

您正在创建局部变量,而不是通过引用捕获映射中的左值,以进行突变。因此,当 e 超出范围时,您在该点之后对 e 所做的任何更改都将被丢弃。

关于c++ - Map数据结构困惑的Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16239052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com