외부 참조 벡터를 기반으로 벡터 정렬
동일한 길이의 벡터가 여러 개 존재하는 상황에서 하나의 벡터를 정렬하려면 다음과 같은 솔루션이 필요합니다. 그에 따라 다른 모든 벡터를 동시에 변환합니다.
다음을 고려하세요. 시나리오:
std::vector<int> Index = { 3, 1, 2 }; std::vector<std::string> Values = { "Third", "First", "Second" };
변환: 인덱스가 정렬됩니다.
예상 결과: 값도 정렬되어야 합니다.
한 가지 접근 방식은 원래 인덱스와 정렬 지시의 요소를 모두 포함하는 벡터를 생성하는 것입니다. 벡터:
typedef vector<int>::const_iterator myiter; vector<pair<size_t, myiter>> order(Index.size()); size_t n = 0; for (myiter it = Index.begin(); it != Index.end(); ++it, ++n) order[n] = make_pair(n, it);
다음으로 이 벡터가 정렬됩니다.
struct ordering { bool operator ()(pair<size_t, myiter> const& a, pair<size_t, myiter> const& b) { return *(a.second) < *(b.second); } }; sort(order.begin(), order.end(), ordering());
정렬된 순서를 사용하면 다른 벡터를 재배열할 수 있습니다.
template <typename T> vector<T> sort_from_ref( vector<T> const& in, vector<pair<size_t, myiter>> const& reference ) { vector<T> ret(in.size()); size_t const size = in.size(); for (size_t i = 0; i < size; ++i) ret[i] = in[reference[i].first]; return ret; }
위 내용은 참조 벡터를 기반으로 여러 벡터를 동시에 정렬하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!