У меня есть:
const char kLetters[] = "QWERTYUIOPASDFGHJKLZXCVBNM";
Я могу вызвать kLetters [n]
, чтобы получить n-ю букву алфавита клавиатуры за O (1) раз. Тем не менее, мне придется повторить через kLetter (занимающее время O (n) или, по крайней мере, O (log n)) для обратного просмотра.
Я хотел бы создать таблицу обратного поиска в качестве статической таблицы поиска во время компиляции с использованием шаблонов и хотел бы знать, есть ли способы сделать это.
EDIT - как упоминалось в комментариях, обратный поиск будет означать, что я поставляю 'E' и возвращаюсь 2. Также мой алфавитный пример был не лучшим примером, я хотел бы не делать никаких предположений относительно порядка. По этой причине я изменил алфавит на порядок клавиатуры.
-121--1830953-Я не уверен, что я делаю что-то не так или это нужно исправить...
У меня есть пользовательский класс оболочки словаря, и вот фрагмент кода, который необходим.
public int Count
{
get
{
Contract.Ensures(Contract.Result<int>() >= 0);
return InternalDictionary.Count;
}
}
public bool ContainsKey(TKey key)
{
//This contract was suggested by the warning message, if I remove it
//I still get the same warning...
Contract.Ensures(!Contract.Result<bool>() || Count > 0);
return InternalDictionary.ContainsKey(key);
}
Единственная причина, по которой я добавил строку для ContainsKey, заключается в том, что я получил следующее предупреждающее сообщение (и все еще делаю): Codecontracts: обеспечивает недоказанность:! Contract.Result < bool > () | | @ this.Count > 0
. Я могу удалить эту строку и все еще получить SAME ISSUE !
Что мне здесь делать, чтобы избавиться от этих проблем?
Обновление:
Я также попытался (как и предлагалось)...
public Boolean ContainsKey(TKey key)
{
Contract.Requires(Count == 0 || InternalDictionary.ContainsKey(key));
Contract.Ensures(!Contract.Result<bool>() || Count > 0);
return InternalDictionary.ContainsKey(key);
}
Метод предупреждения 5 'Мой. Коллекции. Универсальный. ReadOnlyDictionary
2. ContainsKey (тип параметр. TKey) 'реализует метод интерфейса 'System.Collections.Generic.IDictionary
2.Key (параметр типа. TKey) ', поэтому не может добавить Требует.