将两个排序向量合并到一个排序向量中

Posted

技术标签:

【中文标题】将两个排序向量合并到一个排序向量中【英文标题】:Merging two sorted vectors in one sorted vector 【发布时间】:2016-03-01 06:11:43 【问题描述】:

背景:一般目标将两个排序后的文件用空格分隔,并将它们放在一个排序后的文件中。

当前目标,看看我是否可以使用合并函数或类似函数来组合两个排序的向量。

我使用http://www.cplusplus.com/reference/algorithm/merge/ 来指导我使用合并功能。但是,我收到错误“没有对 'merge' 的匹配函数调用”。

我不确定合并函数是否真的会用字符串做我想要的,但我试图用它来看看它是否可以。

#include <iostream>
#include <fstream>  
#include <vector>
#include <algorithm>    // std::merge, std::sort
#include <string>
using namespace std;

ifstream r_data_file(const string oname)

    ifstream ist oname;
    if (!ist) 
        string error = "cannot open " + oname;
        throw runtime_error(error);
    
    return ist;


void get_words(ifstream& ist, vector<string>& Po)

    for (string p; ist >> p;) 
        Po.push_back(p);
    


int main ()

    vector<string> file1;
    vector<string> file2;
    ifstream ist = r_data_file("wordlist_1.txt");
    get_words(ist, file1);
    ifstream ist_2 = r_data_file("wordlist_2.txt");
    get_words(ist_2, file2);
    vector<string> file_1n2(file1.size()+file2.size());
    merge(file1, file1.end(), file2, file2.end(), file_1n2);


我会很感激你的想法,干杯!

【问题讨论】:

std::merge 的最后一个参数应该是一个迭代器,如file_1n2.begin() 【参考方案1】:

您不能简单地将 file1、file2 和 file_1n2 用作简单的指针(也许您的困惑是因为您以这种方式使用普通数组)。这里 merge 使用 stl 迭代器,而不仅仅是一个指针。要解决此问题,请使用:

merge(file1.begin(), file1.end(), file2.begin(), file2.end(), file_1n2.begin());

【讨论】:

谢谢!这是否意味着cplusplus.com/reference/algorithm/merge 也是错误的? @Jingles 不,因为在他们的示例中,第一个和第二个是普通数组,它们以这种方式使用(并且您使用向量)

以上是关于将两个排序向量合并到一个排序向量中的主要内容,如果未能解决你的问题,请参考以下文章

合并排序 - 向量不排序

C++ 合并和排序 2 个向量

对未排序的向量进行合并排序

向量下标超出范围 C++ 合并排序

Armadillo C++:根据其他两个向量对向量进行排序

在c ++中给出两个整数向量(相同的大小和类型),我想从最小到最大的元素对一个进行排序并更改第二个向量的顺序[重复]