나는 양의 정수와 -1을 포함하는 벡터를 가지고있다. 내 문제는 벡터를 정렬하고 싶지만 단지 std::sort
을 사용하여 -1 elements
을 터치하지 않아야한다. (나는 다른 접근법을 알고있다.)표준 정렬하는 방법 :: vector std :: sort 사용하여 특정 요소를 변경하지 마십시오?
입력 : [-1, 150, 190, 170, -1, -1, 160, 180]
출력 : [-1, 150, 160, 170 예컨대
, -1, -1, 180, 190]
이 내 생각이 그것을 해결하는 것입니다하지만 작업 일부러 :
sort(myVector.begin(), myVector.end(), [&](const int& a,const int& b)->bool {
if (a == -1 || b == -1)
return &a < &b;
return a < b;
});
,536,913,632을 10,출력 : [-1, 150, 170, 190, -1, -1, 160, 180]
출력은 다음과 같아야합니다. [-1, 150, 160, 170, -1, -1 , 180, 190]
std::sort
을 사용하여 해결할 생각이 있습니까?
내가 그것을 직접 가능하다고 생각하지 않습니다 대안,
-1
의의 위치를 추출 모든-1
의 삭제, 벡터를 정렬하고 적절한 다시 삽입하는 것입니다. 'std :: sort' 함수는 범위에서 작동하고 요소를 일시적으로 제거하고 나중에 같은 위치에 다시 추가하는 방법이 없습니다 (물론 여러 단계에서이 작업을 수행 할 수 있지만 그 작업은 당신은 묻고 있습니다). 또한 "std :: sort"를 "사용자 정의"하는 것이 의미하는 바를 얻지 못합니다. 또한'std :: sort'가 어떻게 동작하는지 AFAIK가 구현을 정의하므로 순서가 어떻게되는지에 대해 어떤 가정도 할 수 없습니다. – Yashas@ Yashas 내 영어로 죄송합니다. 내 질문을 편집했습니다. –
'-1'의 위치를 벡터에 추출하고, 모든'-1's을 지우고, 정렬하고 다시 파이프합니다. – Ron