2014-12-06 3 views
0

설정은 내가 아이겐 라이브러리에서 VectorXd과 함께 std::set를 사용하려고 해요 :아이겐 : 표준 : VectorXd

typedef VectorXd Vec; 

bool(*fn_pt)(Vec,Vec) = vecCompare; 
set<Vec,bool(*)(Vec,Vec)> yx (fn_pt); 

로 정의 함수 vecCompare 인도 표준시는 다음과 같습니다

bool vecCompare (Vec v, Vec w) { 
    for (int i = 0; i < numCrit; ++i) { 
    if (v(i) < w(i)) return true; 
    } 

    return false; 
} 

Unfortunality을, yx.find (x)가 올바르게 작동하지 않습니다. 즉, x가 이미 yx 인 경우에도 빈 반복기를 반환합니다.

내 코드에 문제가 있습니까?

+0

인가'numCrit == v.rows()'(그리고'== w.rows()')? – Wintermute

+0

네, 그렇습니다. –

답변

1

vecCompare는 전체 주문이 아닙니다. 왼쪽 피연산자의 좌표가 오른쪽 피연산자의 해당 좌표보다 작 으면 true을 반환합니다. 벡터 a = (1, 2), b = (2, 1)의 경우, vecCompare(a, b)vecCompare(b, a)이 모두 참입니다. 당신이 사전 편찬 순서를 의미하는 경우

이 작동합니다 :

bool vecCompare (Vec v, Vec w) { 
    for (int i = 0; i < numCrit; ++i) { 
    if (v(i) < w(i)) return true; 
    if (v(i) > w(i)) return false; 
    } 

    return false; 
} 
관련 문제