c++ 如何将make_pair返回的值赋给插入器

iyr7buue  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(233)

我必须将插入器作为函数参数传递,以便赋值 由make_pair返回到插入器并将它们存储到容器中。有人能帮助我理解make_pair和插入器的相关性吗?

#include <iostream>
#include <list>
#include <vector>
#include <exception>
#include <map>
#include <utility>

template<typename T,typename U,typename V,typename K>
void fun(T beg1,T end1, U beg2, U end2,V ins,K fun){
  try{ 
    if(std::distance(beg1,end1)!=std::distance(beg2,end2)){
      {
        throw std::string{"They're not the same size"};
      }
    }
   } catch(std::string& ex){
     std::cout<<ex<<std::endl;
   }

   while(beg1!=beg2){
     if(!(fun(*beg1,*beg2))){
       ins=std::make_pair(*beg1,*beg2);
       ++beg1;
       ++beg2;
     }
   }
}

int main(){
  std::vector<std::string> l1{"mel","ana","tim"};
  std::vector<std::string> l2{"ana","mel","tim"};
  std::pair<std::string, std::string> l3; 

  auto l=[](const std::string& a, const std::string& b){
    return a==b;
  };

  fun(begin(l1),end(l1),begin(l2),end(l2),inserter(?),l);
}
2ul0zpep

2ul0zpep1#

make_pair只是创建一个pair对象,它没有做任何复杂的事情。
听起来你需要的是类似std::back_inserter的东西,它返回一个迭代器,你可以把结果写入其中:

std::vector<std::pair<std::string, std::string>> results;

fun(begin(l1),end(l1),begin(l2),end(l2),std::back_inserter(results),l);

然后在你的fun中,你写迭代器:

*ins = std::make_pair(*beg1,*beg2);
ins++;

另一种选择是创建一个插入器函数:

std::vector<std::pair<std::string, std::string>> results;
auto ins =[](const std::string& a, const std::string& b){
    results.emplace_back(std::make_pair(a,b));
  };

然后在fun中,调用函数:

ins(*beg1,*beg2);

相关问题