привет всем~ кто хорошо знает как С++, так и Яву, просьба помочь мне показать как перевести сл. С++ код на рельсы Явы. интересует сама логика/механизм. благодарю. Код (Text): struct IndexedCompare : public std::binary_function<int, int, bool> { const std::vector<YourType> *data; IndexedCompare(const std::vector<YourType>& data) : data(&data) { } bool operator()(int left, int right) const { return (*data)[left] < (*data)[right]; } }; // code std::list<int> list; std::vector<YourType> data; list.sort(IndexedCompare(data));
Примерно так: Код (Text): class IndexedCompare implements Comparator<Integer> { private Vector<YourType> data; public IndexedCompare(Vector<YourType> data) { this.data = data; } public int compare(Integer left, Integer right) { return data.get(left) < data.get(right); } } List<Integer> lst; Vector<YourType> data; Collections.sort(lst, new IndexedCompare(data)); Можно в принципе и анонимным классом.
Stiver да, подходит. спасибо! небольшой еще вопрос -- а как завернуть это дело в анонимный класс, ведь здесь имеет место реализованный конструктор. ИМХО, в д. случае в анонимный класс пределать не получится. или я неправ?
varnie Получится, если определить data как final. Тогда анонимный класс получит к ней доступ: Код (Text): List<Integer> lst; final Vector<YourType> data; Collections.sort(lst, new Comparator<Integer>() { public int compare(Integer left, Integer right) { return data.get(left) < data.get(right); } }); Лично я не люблю таких неочевидных зависимостей по данным, но в общем дело вкуса.