【问题标题】:issues interator through map.equal_range通过 map.equal_range 发出 interator
【发布时间】:2013-01-18 18:47:57
【问题描述】:

当我使用 map.equal_range() 时,我在迭代地图时遇到问题 ..我的编译器说没有 's_it = Krange.std::pair 中的 'operator=' 不匹配,'operator !=' 不匹配? 我很困惑,不知道为什么 以下是我的一段代码

void Pdb2Cluster_test
(
    multimap <string, unsigned> & pigAccmap,
    multimap <unsigned, proteininfo> & map2
)
{
    // CArgs args = GetArgs();
    //AnsiString v = diff_b;
    multimap<string , unsigned>::iterator imp;

    multimap<string,proteininfo>::iterator s_it;
    multimap<string, pdbbinfo>::iterator ip;
    // set<string>::iterator idp;
    unsigned pig_b;
    int start, stop;
    // int mststar, mstto;
    unsigned cluster, domgi;
    string pdb_ele;


    pdb_ele = "3ST9A";

    imp = pigAccmap.find(pdb_ele);
    if (imp != pigAccmap.end())
    {    pig_b = imp->second;

        std::pair<multimap<unsigned, proteininfo>::iterator, multimap<unsigned,proteininfo>::iterator> Krange;
        Krange  = map2.equal_range(pig_b);
        for (s_it = Krange.first; s_it != Krange.second; s_it++)
        {
            domgi= s_it->second.domgi;
            start= s_it->second.seqstar;
            stop= s_it->second.seqstop;
            cout<<"\t"<<cluster<<"\t"<<pdb_ele<<"\t" <<pig_b<<"\t"<<domgi<<"\t"<<start<<"\t"<<stop<<endl;
            //   myfile<<cluster<<"\t"<<pdb_ele<<"\t" <<domgi<<"\t"<<start<<"\t"<<stop<<endl;

        }
        imp++;
    }
}

我只需要迭代第二个多图,所以忽略第一个循环的 map.find() 我提到了http://www.cplusplus.com/reference/map/multimap/equal_range/....

【问题讨论】:

  • 请删除此代码中与错误无关的部分。差不多就这些了……

标签: c++ iterator key multimap


【解决方案1】:

map2 的类型是std::multimap&lt;unsigned, proteininfo&gt;

s_it 的类型是std::multimap&lt;std::string, proteininfo&gt;::iterator

这些不匹配。

你可以通过使用一些类型定义来节省一些麻烦,比如

typedef std::multimap<std::string, proteininfo> protein_map_type;

【讨论】:

    猜你喜欢
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多