ソートがやけに重い
std::sortにやけに時間がかかっていたのでなんでかなーと思ってたけど、クラスが大きすぎて移動に時間がかかっていただけだった。
移動が起こらないよう、ポインタの配列をつくってそっちをソートすることにする。
これを
std::vector<T> Ts; std::sort(Ts.begin(), Ts.end());
こうじゃ!
std::vector<T> Ts; std::vector<T*> TPointers; TPointers.reserve(Ts.size()); for (auto& it : Ts){ TPointers.push_back(&it); } std::sort(TPointers.begin(), TPointers.end(), compare);
比較関数はこんな感じ。
bool compare(const T* l, const T* r) { return *l < *r; }
と、たまにはノウハウ的なことも書いてみたりするけど、なかなか勇気が要るな、これは。