내가 ((val * 100) + secondVal
의 오름차순으로) val
및 secondVal
의 값을 기준으로 std::sort()
으로 정렬 할 필요가 클래스 ClassToSort
을 말해봐.빠른 게 뭔데, 인라인 함수 호출 또는 해시 맵 조회
class ClassToSort {
private:
int val;
long int secondVal;
int id;
public:
inline const int getVal() const { return val; }
inline const long int getSecondVal() const { return secondVal; }
inline const int getID() const { return id; }
};
std::vector<ClassToSort*> objs;
지금, 나는 그것을 정렬 중 하나 (val * 100) + secondVal
의 값을 미리 계산하고 std::unordered_map<int, long> valMap
에 저장하고 정렬하는 동안이지도를 참조하거나 (정렬하는 동안 함수가 getVal()
및 getSecondVal()
매번 호출을하는 방법은 두 가지가 이로 인해 함수 호출 수가 두 배가됩니다). 여기에 두 가지 옵션은 다음과 같습니다
std::sort(objs.begin(), objs.end(),
[&](const ClassToSort* first, const ClassToSort* second) {
return valMap[first->getID()] < valMap[second->getID()];
});
및
std::sort(objs.begin(), objs.end(),
[](const ClassToSort* first, const ClassToSort* second) {
return (first->getVal() * 100 + first->getSecondVal()) <
(second->getVal() * 100 + second->getSecondVal());
});
두 번째 옵션은 두 번 각 개체에 대한 게터 함수를 호출 할뿐만 아니라 분명하다, 또한이 두 번 같은 계산을한다. 직관적으로, 나는 많은 수의 입력에 대해, 재 계산과 함께 함수 호출 수가 더 많은 경우보다 해시 테이블 조회가 빠르다고 생각할 것이다. 내 이해가 맞습니까?
측정하여 알려 주시기 바랍니다. 성능면에서 "최상의 솔루션"은 거의 없습니다. 오히려 그것은 데이터와 레이아웃, 실행중인 시스템, 사용되는 구현 및 기타 많은 변수에 크게 의존합니다. –
"무엇이 더 빠릅니까?" is : measure. – user463035818
이러한'inline' 선언은 중복되어 있습니다. 함수는 함수없이 인라인입니다. –