와 종류 나는 지금 내가 두 번을 또 다른 벡터를 기반으로 인덱스 벡터를 정렬하는 간단한 분류 코드가 다음 코드표준 : : out_of_range : 사용자 정의 비교
template<typename T>
bool GenericCompare(T lhs, T rhs)
{
return lhs < rhs;
}
template<typename T>
class SortOrder
{
public:
SortOrder(const std::vector<T> *_sortArray,
bool (*_comparator)(T,T) = GenericCompare) :
sortArray(_sortArray) , comparator (_comparator) , customOperator(true) {;}
bool operator()(int lhs=0, int rhs=0) const
{
bool res;
try {
sortArray->at(lhs);
}
catch (std::out_of_range& oor) {
std::cout << "LHS Out of range: " << lhs << " : " << rhs
<< " " << oor.what() << std::endl;
}
try {
sortArray->at(rhs);
}
catch (std::out_of_range& oor) {
std::cout << "RHS Out of range: " << lhs << " : "
<< rhs << " "<< oor.what() << std::endl;
}
// Always needs comparator
res = comparator(sortArray->at(lhs),sortArray->at(rhs));
return res;
}
private:
const std::vector<T> *sortArray;
bool (*comparator)(T,T);
bool customOperator;
};
있습니다. 'circle_fwd_vector'는 모든 double을 포함하는 벡터입니다. 콘솔에서 이제
for (int i=0;i<circle_fwd_vector.size();i++) {
circle_index_vector.push_back(i);
}
try {
std::sort(circle_index_vector.begin(),circle_index_vector.end(),
SortOrder<double>(&circle_fwd_vector));
}
catch (std::exception& e)
{
std::cout << e.what() << std::endl;
}
는,이 같은 결과를 받고 있어요 :
RHS Out of range: 1711 : 1079615151 vector::_M_range_check
나는 사용자 정의 클래스와 I 정렬있어 벡터를 사용하지 않는 때문에 기반으로 그냥 두 배로 왜 내가 범위를 벗어나는 지 모르겠다. 나는 double vector에 무한대가 존재하지 않는다는 것을 확인했다. 그러나 std :: sort는 여전히 인덱스에서 벗어나지 않고 올바른 정렬 된 인덱스를 제공하지 않아야한다.
도움 주셔서 감사합니다.
편집 : 도움이된다면, 여기에 벡터의 데이터 덤프가 있습니다. http://pastebin.com/7wLX63FJ 또한 Xcode 3.2.6과 함께 제공되는 GCC 4.2를 사용하여 컴파일 중입니다.
'circle_fwd_vector'가 비어 있지 않습니까? 그건 그렇고,'circle_index_vector'의 마지막 요소를 정렬에서 벗어나는 이유가 무엇입니까? 표준 알고리즘이 반 개방 범위에서 작동한다는 것을 알고 있습니까? –
죄송합니다. 코드를 수정했습니다. 마지막 요소가 생략 되어도 동일한 결과를 생성합니다. 또한 벡터가 비어 있지 않은지 확인했습니다. 여전히 같은 결과입니다. – rwb
질문에서 편집을 참조하십시오. 또한 도움이된다면 벡터에 데이터를 추가했습니다. – rwb