Vector of struct (copy_n和归并排序)

Vector of struct (copy_n and merge sort)

本文关键字:归并排序 copy of struct Vector      更新时间:2023-10-16

我有一个struct和struct的向量:

struct S
{
    int Efficiency;
    int Number;
};
std::vector<S> Empl;

我尝试输入Empl。使用copy_n:

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

但是总是出现vector不包含Efficiency的错误。我如何输入员工效率?

如果我使用归并排序,我如何根据效率排序并节省对效率&number ?

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)); 

这行不通:

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

因为Empl是一个vector,而Efficiency是该vector内部结构体的成员。在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操作符,读入Efficiency而忽略Number。