С++ --> Java: прошу подсказать гуру

Тема в разделе "LANGS.C", создана пользователем varnie, 10 ноя 2008.

  1. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    привет всем~

    кто хорошо знает как С++, так и Яву, просьба помочь мне показать как перевести сл. С++ код на рельсы Явы. интересует сама логика/механизм. благодарю.

    Код (Text):
    1. struct IndexedCompare : public std::binary_function<int, int, bool> {
    2.  
    3.     const std::vector<YourType> *data;
    4.  
    5.     IndexedCompare(const std::vector<YourType>& data) : data(&data) { }
    6.  
    7.     bool operator()(int left, int right) const
    8.     {
    9.         return (*data)[left] < (*data)[right];
    10.     }
    11. };
    12.  
    13. // code
    14.  
    15. std::list<int> list;
    16. std::vector<YourType> data;
    17.  
    18. list.sort(IndexedCompare(data));
     
  2. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    Примерно так:

    Код (Text):
    1. class IndexedCompare implements Comparator<Integer> {
    2.    
    3.     private Vector<YourType> data;
    4.        
    5.     public IndexedCompare(Vector<YourType> data) {
    6.         this.data = data;
    7.     }
    8.        
    9.     public int compare(Integer left, Integer right) {
    10.         return data.get(left) < data.get(right);
    11.     }
    12. }
    13.    
    14. List<Integer> lst;
    15. Vector<YourType> data;
    16.        
    17. Collections.sort(lst, new IndexedCompare(data));
    Можно в принципе и анонимным классом.
     
  3. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    Stiver
    да, подходит. спасибо!

    небольшой еще вопрос -- а как завернуть это дело в анонимный класс, ведь здесь имеет место реализованный конструктор. ИМХО, в д. случае в анонимный класс пределать не получится. или я неправ?
     
  4. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    varnie

    Получится, если определить data как final. Тогда анонимный класс получит к ней доступ:

    Код (Text):
    1. List<Integer> lst;
    2. final Vector<YourType> data;
    3.            
    4. Collections.sort(lst, new Comparator<Integer>() {
    5.     public int compare(Integer left, Integer right) {
    6.         return data.get(left) < data.get(right);
    7.     }
    8. });
    Лично я не люблю таких неочевидных зависимостей по данным, но в общем дело вкуса.
     
  5. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    Stiver
    благодарю.