首页 > 解决方案 > 二进制“=”:未找到采用“_Ty”类型的左侧操作数的运算符(或没有可接受的转换)

问题描述

大家好,我在程序下面写但最终我知道
我在某处犯了语法错误,代码也没有编译,它没有指向任何行,也没有发生错误的地方请帮助

错误 :

Severity Code Description Project File Line Suppression State Error C2678 binary '=': no operator found which takes a left-hand operand of type '_Ty' (or there is no acceptable conversion) Project5 c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.15.26726\include\utility 68

#include<iostream>
#include<vector>
#include<set>
using namespace std;
vector<int> a;
set<pair<int, int>> sat;
int main() {
    int n;
    cin >> n;
    a.resize(n);
    for (int i = 0; i < n; i++) {
        int u;
        cin >> u;
        sat.insert({ u,i });
    }
    reverse(sat.begin(), sat.end());
    ///int pos = 0;
    ///set<pair<int, int>>::iterator it ;
    auto it = sat.begin();
    int prev = it->first;
    a[it->second] = 1;
    it++;
    for (; it != sat.end(); it++) {
        if (it->first == prev) {
            a[it->second] = a[(next(it, -1))->second];
        }
        else {
            a[it->second] = a[(next(it, -1))->second] + 1;
            prev = it->first;
        }
    }



}

标签: c++set

解决方案


虽然这是错误消息的第一行,但后面应该有其他消息,这些消息会逐步报告模板实例化的每个级别及其来源,最终在您的代码中结束。如果您仔细检查错误消息的每一行,最终您将在代码中看到以下行:

reverse(sat.begin(), sat.end());

sat是一个std::setstd::reverse将容器的内容反转到位。不幸的是,您不能将std::set. std::set不能这样工作。std::set是一个有序的容器,它总是std::set以预定的顺序排列 中的值。

目前尚不清楚您的程序的意图是什么,但是无论如何,这就是您的错误消息的原因。您将不得不切换到不同的容器,可能是 astd::vector或 a std::list


推荐阅读