строка:: size_type вместо интервала

От http://www.programmersheaven.com/download/49349/download.aspx

private static  Map sortByValue(Map map) {
    List> list = new LinkedList<>(map.entrySet());
    Collections.sort(list, new Comparator() {
        @SuppressWarnings("unchecked")
        public int compare(Object o1, Object o2) {
            return ((Comparable) ((Map.Entry) (o1)).getValue()).compareTo(((Map.Entry) (o2)).getValue());
        }
    });

    Map result = new LinkedHashMap<>();
    for (Iterator> it = list.iterator(); it.hasNext();) {
        Map.Entry entry = (Map.Entry) it.next();
        result.put(entry.getKey(), entry.getValue());
    }

    return result;
}

58
задан billz 13 March 2013 в 11:11
поделиться

2 ответа

Короткое замыкание также содержит числа. То же самое и со знаком char.

Но ни один из этих типов не может быть достаточно большим для представления размеров любых строк.

string :: size_type гарантирует именно это. Это тип, достаточно большой для представления размера строки, независимо от ее размера.

В качестве простого примера того, почему это необходимо, рассмотрим 64-битные платформы. Типичный тип int для них по-прежнему 32-битный, но у вас гораздо больше, чем 2 ^ 32 байта памяти.

Таким образом, если бы использовался (подписанный) int, вы не смогли бы создавать строки размером более 2 ^ 31 символа. . Однако на этих платформах size_type будет 64-битным значением, поэтому оно может без проблем представлять строки большего размера.

100
ответ дан 24 November 2019 в 18:48
поделиться

Вложенный size_type typedef является обязательным требованием для STL-совместимых контейнеров (каковым бывает std :: string ), поэтому общий код может выбрать правильный целочисленный тип для представления размеров.

Нет смысла использовать его в коде приложения, size_t вполне нормально ( int нет, потому что он подписан, а вы ' я получу подписанные / неподписанные предупреждения о сравнении).

7
ответ дан 24 November 2019 в 18:48
поделиться
Другие вопросы по тегам:

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