struct的向量(copy_n和合并排序)

时间:2016-10-31 13:03:40

标签: c++

我有struct的结构和向量:

struct S
{
    int Efficiency;
    int Number;
};

std::vector<S> Empl;

我尝试使用copy_n输入Empl.Efficiency:

std::copy_n(std::istream_iterator<int>(std::cin), NumberOfEmpl, std::back_inserter(Empl.Efficiency));

但总是会出现错误,即矢量不包含效率。我如何输入Empl.Efficiency?

如果我使用合并排序,我还可以如何按效率排序并节省对效率和数字?

void merge_sort(BidirIt first, BidirIt last, Compare cmp = Compare{})
{
    const auto n = std::distance(first, last);
    if (n > 1) {
        const auto middle = std::next(first, n / 2);
        merge_sort(first, middle, cmp);
        merge_sort(middle, last, cmp);
        std::inplace_merge(first, middle, last, cmp);
    }
}
...
merge_sort(std::begin(Empl.Efficiency), std::end(Epml.Efficiency)); 

1 个答案:

答案 0 :(得分:1)

这无效:

std::copy_n(std::istream_iterator<int>(std::cin), NumberOfEmpl, std::back_inserter(Empl.Efficiency));

因为Empl是一个向量,但是效率是该向量中结构的成员。你不能&#34;广播&#34;这种方式在C ++中。但是,你可以这样做:

std::copy_n(std::istream_iterator<int>(std::cin), NumberOfEmpl, std::back_inserter(Empl));

如果您实施:

std::ostream& operator >>(std::ostream& in, S& empl) {
    return in >> empl.Efficiency;
}

也就是说,为结构创建一个istream运算符,该运算符读入效率并忽略数字。