C++ 用于在向量中查找整数对的无序集合创建
为了在向量中查找对,我使用了C++ 用于在向量中查找整数对的无序集合创建,c++,unordered-set,C++,Unordered Set,为了在向量中查找对,我使用了无序集。我需要帮助解释为什么创作不起作用 我正在编写一些代码,试图找到向量中的对。我需要unordered\u set作为逻辑 这是我的密码: int sockMerchant(int n, vector<int> ar) { set<int> colors = new unordered_set<int>(); int pairs; for ( int i = 0 ; i < n ; i++ )
无序集
。我需要帮助解释为什么创作不起作用
我正在编写一些代码,试图找到向量中的对。我需要unordered\u set
作为逻辑
这是我的密码:
int sockMerchant(int n, vector<int> ar) {
set<int> colors = new unordered_set<int>();
int pairs;
for ( int i = 0 ; i < n ; i++ ) {
if(!colors.contains(ar[i])) {
colors.insert(ar[i]);
} else {
pairs++;
colors.erase(ar[i]);
}
}
return pairs;
}
除了要创建并包含要使用的
无序集
。这里有很多问题(而且编译器非常好,可以提供关于它的真正信息)
std::unordered_set*
分配到std::set
变量中。类型不匹配,一个是指针(从new()
返回),另一个是本地堆栈变量。实际类与unordered\u set!=设置
std::unordered_set
中使用find
成员函数,查看元素是否已在集合中
您可以在此处查看类的定义:
在另一个注意事项中,如果不需要使用new
,请不要使用它。该函数不返回您创建的集合。
如果您坚持使用
new
,则应在使用完集合后使用delete
,否则将导致内存泄漏。您正试图使用unordered\u set*
类型的值初始化set
类型的变量<代码>设置≠ <代码>无序集,一个是指针,另一个不是指针。使用new
有什么特别的原因吗?我的想法是调用构造函数并可以使用contains。如果我使用无序集的初始化而不使用new,我会得到以下结果:使用代码:无序集颜色代码>错误消息:_Solution.cpp:在函数“int sockMerchant(int,std::vector)”中:解决方案。cpp:14:20:错误:“class std::set”在(!colors.contains(ar[i])中没有名为“contains”的成员{ ^ ~~~~~~~~~~(为什么不做):代码不规则的设置颜色:< /COD>颜色?看起来像是用java编写的。C++中,你不需要总是使用<代码>新的<代码>来构造对象。只是代码>无序的集合颜色;在这个例子中,就足够了。谢谢Enosh。我用排序向量来解决它,然后检查I和I+P 1中的元素。位置。
Solution.cpp: In function 'int sockMerchant(int, std::vector<int>)':
Solution.cpp:10:23: error: conversion from 'std::unordered_set<int>*' to non-scalar type 'std::set<int>' requested
set<int> colors = new unordered_set<int>();
^~~~~~~~~~~~~~~~~~~~~~~~
Solution.cpp:15:20: error: 'class std::set<int>' has no member named 'contains'
if(!colors.contains(ar[i])) {
^~~~~~~~
1