배경 : 축적하려는 관련 특성에 개체의지도를 저장하는 알고리즘을 작성 중입니다. 이것은 네트워크를 통해 사전 정의 된 경로를 사용하여 네트워크로이 속성을로드하는 계단식 할당 절차입니다. 경로는 네트워크의 출발점에서부터 네트워크를 통과하는 모든 지점까지의 빌드 포워드 경로로 정의됩니다.사용자 지정 엄격한 약한 순서 지정
질문 : 내 계단식 방법에
bool pathLinkComp(const PathLink* lhs, const PathLink* rhs)
{
return (lhs != rhs) && (lhs->cost < rhs->cost);
}
그런 다음 사용자 정의 비교와 맵을 사용하여이를 달성하기 위해 나는 다음과 같은 방법으로 이것을 사용
PathLinkTripsMap myMap(pathLinkComp);
myMap[pathLinkOfInterest] = 100.0;
// populate other pathLinksOfInterest with initial values
while (myMap.size())
{
// pop
auto firstIterator = myMap.end(); --firstIterator;
PathLink* link = firstIterator->first;
double trips = firstIterator->second;
myMap.erase(firstIterator);
// do something with the popped data
// move the trips back onto the previous link (unless we are at the end of the path)
PathLink* backLink = link->backLink;
if (backLink) myMap[backLink] += trips;
}
이 문제는 경우 그 엄격한 약한 순서를 사용하면 PathLink 객체 두 개가 동일한 비용을 가지면 인덱싱 목적으로 동일한 객체가됩니다. < 대신에 < = 올바른 동작을 얻지 만이 작업은 std :: map의 비교기가하는 엄격한 약한 순서 지정을 제공하지 않습니다. 강제로 큰 일입니다. 이런 식으로 작동하는 std :: map?
어떻게하면 비교기를 구성하여 엄격한 취약성을 달성하고 별도의 키를 분리하여 유지할 수 있습니까?
language breakdown there ... "대신 <, 다음 ...."을 사용하면 ... strick-weak-ordering을주지 않습니다. –
이것은 적어도'(lhs -> 비용 < rhs-> 비용) || ((lhs-> cost == rhs-> cost) && std :: less() (lhs, rhs))'를 호출합니다. –
@OliCharlesworth : 네, 고마워요. –