You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用std::find处理pair类型向量时出现no viable overloaded '='报错如何解决

问题原因

报错的核心是迭代器类型不匹配:

  • iso是元素为std::pair<int, int>的向量,std::find遍历iso返回的迭代器类型为std::vector<std::pair<int, int>>::iterator
  • 代码中错误将接收返回值的it声明为vector<int>::iterator,两种迭代器属于完全不兼容的类型,无法互相赋值,因此编译器抛出类型转换失败的赋值运算符重载报错。

修复方案

方案1:手动修正迭代器声明

将it的声明修改为和iso元素类型匹配的迭代器:

std::vector<std::pair<int, int>>::iterator it;
it = std::find(iso.begin(), iso.end(), vec[i]);

方案2:使用auto自动推导类型(C++11及以上版本适用)

无需手动编写冗长的迭代器类型,让编译器自动匹配std::find返回的迭代器类型,写法更简洁不易出错:

auto it = std::find(iso.begin(), iso.end(), vec[i]);

优化建议

当前代码对同一个vec[i]调用了两次std::find,会产生两次冗余遍历,可以调整为仅调用一次查找复用结果,提升执行效率:

std::vector<std::pair<int, int>> nodat;
std::vector<std::pair<int, int>> unknown;
std::vector<std::pair<int, int>> measure;
for(int i = 0; i < vec.size(); i++){
    auto it = std::find(iso.begin(), iso.end(), vec[i]);
    if(it == iso.end()){
        nodat.push_back(vec[i]);
    }
    else{
        int index = std::distance(iso.begin(), it);
        if(HalfLife[index] == 1e-50){
            unknown.push_back(vec[i]);
        }
        else if(HalfLife[index] > 1e-8){
            measure.push_back(vec[i]);
        }
    }
}

内容的提问来源于stack exchange,提问作者Zachary Finger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:30:04