我试图形成一个整数向量的集合,在检查集合中是否已经存在相同的解时,我得不到正确的答案。
这是关于C++11的,我之前也发过类似的问题,但是没有得到任何有意义的回复。为什么每当我们形成一张地图或一组向量时,is不能识别我插入的向量是否与我已经插入的向量相同?几个月以来,我一直在寻找答案。此外,由于在Java等其他语言中也允许这种行为,因此必须解决此问题。如果有人能指出为什么这个行为不像我期望的那样工作,以及这个问题的可能解决方案是什么,那就太好了。
下面的代码是Leetcode上3Sum问题的解决方案,但由于我上面解释的原因,它不起作用。
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>>result;
unordered_map<int,int>m;
set<vector<int>>res;
bool flag=false;
if(nums.size()<=2)
return result;
vector<int>temp;
for(int i=0;i<nums.size()-1;i++)
{
int comp=-(nums[i]+nums[i+1]);
if(m.find(comp)!=m.end())
{
auto location=m.find(comp);
temp.push_back(comp);
temp.push_back(nums[i]);
temp.push_back(nums[i+1]);
if(res.find(temp)==res.end())
{
res.insert(temp);
result.push_back(temp);
}
temp.clear();
}
else
{
m[nums[i]]=i+1;
m[nums[i+1]]=i+2;
}
}
return result;
}
在输入为0,0,0,0时,答案应该是: 0,0,0,而我得到的是:[0,0,0,0,0,0,0]
发布于 2019-05-06 03:25:37
您可以在集合中使用元组而不是向量。
#include <tuple>
#include <set>
#include <iostream>
using std::get;
int main(int argc, char* argv[]) {
std::set<std::tuple<int,int,int>> sums;
auto tup1 = std::make_tuple(0, 0, 0);
sums.insert(tup1);
auto tup2 = std::make_tuple(0,0,0);
sums.insert(tup2);
std::cout << sums.size() << std::endl;
for (auto& item : sums) {
std::cout << "(" << get<0>(item) << "," << get<1>(item) << "," << get<2>(item) << ")\n";
}
return 0;
}
https://stackoverflow.com/questions/55998269
复制