大文字小文字を区別しないstd::set
管理中のファイルパスから重複しないリストを作成しなければならない。重複しないリストということで、std::setを使おうと思った。std::list
しかし、これだと大文字小文字を別の文字列として区別してしまうため、Windowsのファイルシステムとは相性があわない。そこで、以下の様に大文字小文字を区別しないsetを定義した。
struct comp_nocase { bool operator()(const std::string& x, const std::string& y) const { return stricmp(x.c_str(), y.c_str()) < 0; } }; typedef std::set<std::string, comp_nocase> NOCASE_STR_SET; NOCASE_STR_MAP result(comp_nocase());
ここまで書いて、全てのパスを大文字化してからsetに登録すれば、こんな面倒な事しなくてもいい事に気が付いた。
あああ。