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::设置< /Calp> NO.<代码> STD::unOrdEdEdSt< <代码>没有成员函数名为<>代码>包含< /C>(至少在当前C++标准中,将在C++ 20中可用)。您只需在
    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