2016-10-31 2 views
0

私は構造体の構造体とベクトルを持っている:構造体のベクタ(copy_nとマージソート)

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

これは意味をなさない。 'Efficiency'は整数であり、ベクトルではありません。 –

答えて

1

これは動作しないことができます。

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演算子を作ります。

+0

私は効率的にcopy_nを試みましたが、同じエラーがあります。また、std :: ostream演算子については、*関数定義は '{' token:ostream&operator * – Kate

+0

@Kateの前にここでは許されません。 –