Учитывая переменную C ++ std :: string
, которая включает табуляцию символов, можно ли определить длину этой строки так, как она будет отображаться на «экране»? то есть: [
std::string var = "\t\t\t";
std::cout << var.length(); // result: 3
std::cout << printed_length(var); // result: 3*(# of spaces per tab)
-121--1872278- У меня есть словарь с ключами, которые являются целыми числами. Я хочу получить самый большой ключ. Я не отслеживаю ключи, поэтому они могут быть последовательными (например, 1,2,3,4,5,6), но могут пропускать (1,3,4,5), хотя я сомневаюсь, что это имеет какое-то значение.
Я просто использую двоичный поиск или есть метод? Насколько я понимаю, вы вряд ли сможете превзойти бинарный поиск для такой простой задачи - возможно, вы сможете сократить его вдвое.
Если у вас есть доступный LINQ, вы должны сделать:
myDictionary.Keys.Max();
Бинарный поиск был бы самым быстрым, но не работал бы против обычного словаря, так как ключи не хранятся в каком-либо определенном порядке. @ Ответ Minitech, используя Linq Max()
, самый простой, если вы используете обычный словарь.
Если это операция, которую вам придется выполнять много раз, вы можете рассмотреть возможность перехода к SortedDictionary<TKey, TValue>
, который сортирует записи по ключу.
var dict = new SortedDictionary<int, int> {{3, 0}, {12, 0}, {32, 0},
{2, 0}, {16, 0}, {20, 0}};
Console.WriteLine(dict.Keys.Last()); //prints 32
РЕДАКТИРОВАТЬ: Этот может быть медленнее , чем обычный словарь. Я полагаю, было бы хорошо упомянуть об этом. Это связано с тем, что записи в словаре хранятся по-разному (красное / черное дерево и хеш-таблицы / хэш-таблица)
Там есть точка, в которой SortedDictionary
становится быстрее, чем нормальный Dictionary
. Тем не менее, это, вероятно, будет около 1 миллиона предметов, однако это только предположение. Оказывается, это примерно в 10 раз быстрее при таком количестве предметов (но мы все равно говорим о сотых долях секунды, так что это действительно имеет значение?). Это примерно равно выпуску x64 для 100000 наименований. Учитывая дополнительные затраты на добавление элементов в словарь, это, вероятно, того не стоит. Кроме того, я немного «обманул», переопределив компаратор, чтобы он сортировал в обратном порядке, поэтому я фактически делаю dict.Keys.First()
вместо последнего, чтобы получить самый большой элемент.
SortedDictionary действительно предназначен, если вам нужно перебирать все пары Key Value по порядку. Я думаю, что ответ @ SimonMourier, вероятно, лучший. Я гарантирую вам, что это самый быстрый, с минимальными накладными расходами.