Я пытаюсь сформировать набор векторов целых чисел и, проверяя, существует ли такое же решение в наборе, я не получаю правильного ответа.
Это относится к C ++ 11.Я также опубликовал подобный запрос ранее, но не получил никаких значимых ответов.Почему всякий раз, когда мы формируем карту или набор векторов, он не может распознать, если я вставлю вектор, идентичный тому, который я уже вставил?Я искал ответ с месяцев.Кроме того, поскольку такое поведение разрешено в других языках, таких как Java, необходимо обойти это.Было бы замечательно, если бы кто-то мог указать, почему это поведение не работает так, как я ожидаю, и каким должно быть это вероятное решение.
Приведенный ниже код является решением проблемы 3Sum в Leetcode,но не работает именно из-за того, что я объяснил выше.
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]]