我试图形成一组整数向量,并检查集合中是否已经存在相同的解决方案,所以我没有得到正确的答案。
这是关于C ++ 11的。我也早些时候发布过类似的查询,但是没有得到任何有意义的答复。 为什么每当我们形成一个地图或一组向量时,都无法识别是否插入了与已经插入的向量相同的向量? 自几个月以来,我一直在寻找答案。另外,由于在其他语言(例如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 :(得分:-1)
您可以在集合中使用元组而不是向量。
#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;
}