【发布时间】:2016-01-15 14:26:41
【问题描述】:
我有一个整数列表。(当前存储在 std::vector 中,但为了提高效率,我需要将其转换为 set。但在当前版本中,我使用它如下:(我使用的是 c+ +98 不是 c++11)
int res=0;
vector<vector<int> >costMatrix;
vector<int>partialSolution;
for(int i =0;i<partialSolution.size()-1;i++){
res+=costMatrix[partialSolution.get(i)][partialSolution.get(i+1)];
}
所以,我需要对设置的数据结构做同样的事情。但我不知道如何一次从集合中获取两个元素。我可以使用下面的代码获得partialSolution.get(i),但我无法获得partialSolution.get(i+1)。有人帮我修改下面的代码吗?
// this time set<int> partialSolution
int res=0;
std::set<int>::iterator it;
for (it = partialSolution.begin(); it != partialSolution.end(); ++it)
{
res+=costMatrix[*it][];
}
【问题讨论】:
-
"当前存储在
std::vector,但为了提高效率,我需要将其转换为std:;set" - 这似乎不太可能提高性能,std::set对缓存非常不友好。 -
在我的代码的其他地方,我正在搜索我的向量是否包含特定数字。实际上我必须改变那部分。但是要改变它,我也必须改变我上面提到的部分。 @BoBTFish
-
如果您希望
set的行为与您的vector相同,我必须假设您的vector已排序。因此,您可以使用std::lower_bound有效地查找现有元素(如果您只需要知道它存在而不需要访问它,甚至可以使用std::binary_search)。 -
@zwlayer 我正在尝试确定这是否是XY Problem。当问题是“我怎样才能射中自己的脚?”时,唯一正确的答案是“不要!”
-
你应该听听他在说什么。
vector很有可能会胜过您的set尝试...
标签: c++ stdvector c++98 stdset