Lexicographic

lexicographic.png

もともとは辞書順という意味。
最も右側でyが最大のものがlexicographicallyで最大[1]

#include <iostream>     // std::cout, std::boolalpha
#include <algorithm>    // std::lexicographical_compare
#include <cctype>       // std::tolower
using namespace std;
//大文字小文字を無視して比較する
bool mycomp(char c1, char c2)
{
    return std::tolower(c1)<std::tolower(c2);
}
 
int main() {
    char foo[] = "Apple";
    char bar[] = "apartment";
 
    cout << std::boolalpha;
 
    cout << " ("<<foo<<"<"<<bar<<") を辞書順に比較"<<endl;
 
    cout << "デフォルトの場合 : ";
    cout << std::lexicographical_compare(foo, foo + 5, bar, bar + 9)<<endl;
    //ASCII文字で'A'=65,'a'=97 なので 'A'の方が'a'よりも小さい。
    cout << "大文字小文字を無視して比較する場合: ";
    cout << std::lexicographical_compare(foo, foo + 5, bar, bar + 9, mycomp)<<endl;
    //小文字にすると3文字目のpとaの比較になって"apartment"の方が小さくなる
 
    return 0;
}

点群をlexicographicにソートする

#include <iterator>
/**点をx座標左→右順にソートする関数*/
bool lexicographicCompare(const glm::vec3& firstElem, const glm::vec3& secondElem) {
    return firstElem.x < secondElem.x;
}
std::sort(std::begin(points), std::end(points), lexicographicCompare);

サポートサイト Wikidot.com