簡體   English   中英

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

[英]Vector of struct (copy_n and merge sort)

我有一個結構和結構的向量:

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

但是總是出現矢量不包含效率的錯誤。 如何輸入效率?

還有,如果我使用合並排序,如何按效率排序並保存對效率和數量?

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是向量,但是效率是該向量內部結構的成員。 您不能在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運算符,該運算符讀入效率並忽略Number。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM