我有一个整数向量,我需要执行大量的移动,砍伐和更改列表。但是......我主要需要根据它们的价值来访问这些项目。
所以我已经想到了使用std :: list(双链表)的想法,这将有助于重新排序操作。然后还要创建一个由整数值索引的向量,其中值是对std :: list项的引用的向量。这样我就不必迭代整个链表来查找列表中的特定值,因为我将使用这些较小的引用向量。
我无法弄清楚如何设置它。
以下是我尝试过的示例:
vector<int> original = { 1, 1, 0, 2, 1, 3, 1, 0 };
vector<vector<int*>> byNumber(4);
list<int> linkedList;
for (int i = 0; i < original.size(); ++i) {
linkedList.push_back(original[i]);
byNumber[original[i]].push_back(*linkedList[i]);
}
将“原始”项目推送到linkedList非常简单,但是在byNumber中创建引用是我坚持的地方。我也试过推进&(*linkedList[i])
。我不清楚我可以用什么语法来做这件事,以及它是否有可能。我还涉及使用unique_ptr而不是int *,如果问题太多,我可以转回去。
答案 0 :(得分:1)
根据使用迭代器的建议,我想出了这个。但如果有人有更严格的解决方案,我很乐意听到它。
vector<int> original = { 1, 1, 0, 2, 1, 3, 1, 0 };
vector<vector<list<int>::iterator>> byNumber(4);
list<int> linkedList;
list<int>::iterator it;
for (int i = 0; i < original.size(); ++i) {
linkedList.push_back(original[i]);
it = linkedList.begin();
advance(it, i);
byNumber[original[i]].push_back(it);
}
答案 1 :(得分:0)
下面:
vector<vector<int*>> byNumber(4);
您正在存储指针,而不是引用。你可以这样做:
vector<vector<int&>> byNumber(4);
但为什么不存储迭代器,如下所示:
vector<vector<vector<int>::iterator>> byNumber(4);