c++ - 将两个排序 vector 合并为一个排序 vector

标签 c++ sorting vector merge

背景:总体目标将两个字符串以空格分隔的已排序文件合并为一个已排序文件。

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

我正在使用 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);

}

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

最佳答案

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

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

关于c++ - 将两个排序 vector 合并为一个排序 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35715886/

相关文章:

r - 计算字符数量及其位置,直到达到某个值

c++ - 在 std vector 中存储对象的正确方法

c++ - 如何在 C++ 模板中使用比较表达式?

c++ - 这个未定义的行为或实现是否已定义?

java - 按频率排序单词? (从最低到最高)

python - python中的插入排序在列表末尾带有负数

c++ - C++中的 vector 交集

c++ - 动态分配对象数组

python - libstdc++ 错误 : 'GLIBCXX_3.4.22' not found

java - 使用区分大小写的字符串键对 Java 中的对象进行排序