сравнение фреймворков для рисования графов Java с открытым исходным кодом (JUNG и Prefuse) для построения топологии сети

Я записал for_each_if() и for_each_equal(), которые делают то, что я думаю, что Вы ищете.

for_each_if() берет функтор предиката для оценки равенства, и for_each_equal() принимает значение любого типа и делает прямое сравнение с помощью operator ==. В обоих случаях функция, в которой Вы передаете, вызвана на каждом элементе, который проходит тест равенства.

/* ---

    For each
    25.1.1

        template< class InputIterator, class Function, class T>
            Function for_each_equal(InputIterator first, InputIterator last, const T& value, Function f)

        template< class InputIterator, class Function, class Predicate >
            Function for_each_if(InputIterator first, InputIterator last, Predicate pred, Function f)

    Requires:   

        T is of type EqualityComparable (20.1.1) 

    Effects:    

         Applies f to each dereferenced iterator i in the range [first, last) where one of the following conditions hold:

            1:  *i == value
            2:  pred(*i) != false

    Returns:    

        f

    Complexity: 

        At most last - first applications of f

    --- */

    template< class InputIterator, class Function, class Predicate >
    Function for_each_if(InputIterator first, 
                         InputIterator last, 
                         Predicate pred, 
                         Function f)
    {
        for( ; first != last; ++first)
        {
            if( pred(*first) )
                f(*first);
        }
        return f;
    };

    template< class InputIterator, class Function, class T>
    Function for_each_equal(InputIterator first, 
                            InputIterator last, 
                            const T& value, 
                            Function f)
    {
        for( ; first != last; ++first)
        {
            if( *first == value )
                f(*first);
        }
        return f;
    };
27
задан Community 23 May 2017 в 10:30
поделиться

1 ответ

Я один из создателей и тех, кто поддерживает JUNG, так что имейте это в виду для ответов ниже.

Во-первых, я должен сказать, что автор Prefuse - друг друга (и да, мы встретились), и он проделал большую работу. У меня нет опыта работы с Prefuse, но я видел несколько прекрасных визуализаций, созданных с его помощью.

1113 Вот ответы на эти вопросы для Юнга. Некоторые из них ((1), (2), (4) продемонстрированы в PluggableRendererDemo:

  1. поддерживаются (вам потребуется правильная модель данных, не все поддерживают параллельные ребра из соображений производительности) )
  2. Поддерживается (опять же, вам нужна правильная модель данных)
  3. Поддерживается (см. ImageShaperDemo)
  4. Поддерживается (большинство демонстраций)
  5. Поддерживается ( см. GraphEditorDemo)
  6. Не поддерживается напрямую, хотя вы, безусловно, можете динамически изменять метки и использовать HTML для визуализации сложных меток.
  7. Алгоритмы компоновки JUNG больше подходят для общих сетей (за некоторыми исключениями для деревья и т. д.). Вы, конечно, можете создать свои собственные алгоритмы компоновки, но многие это сделали.

Надеюсь, это поможет.

5
ответ дан 28 November 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: