Исходя из Java, я привык к построению структуры данных, что я могу быстро/легко ссылаться, что позволяет мне делать такие вещи, как добавление целых чисел в список, и проверить, есть ли целое число в списке.
Поскольку это кажется общим, я надеюсь увидеть, что это простой способ сделать это C++ Builder. Я согласен с использованием стандартной библиотеки C++, если она будет работать с C++ Builder.
Вы можете использовать std::vector
или std::set
. Используйте vector
если вы хотите разрешить дубликаты, используйте set, если вы этого не сделаете. Поиск vector
также будет значительно медленнее по сравнению с set
.
std::vector<int> intCheckList;
std::set<int> intCheckSet;
Предложение mattingly890 работало для меня, это просто продолжение, чтобы привести пример того, как я использовал набор, как ссылку для других. Ниже приведен пример кода, который я вставлял в набор и тестировал, чтобы узнать, было ли это значение в наборе. Убедитесь, что #include <set>
наверху.
// Test std set
std::set<int> myset;
std::set<int>::iterator it;
myset.insert(10);
myset.insert(20);
myset.insert(30);
it = myset.find(10);
boolean found = it!=myset.end();
if(found)
MessageDlg("Found 10", mtInformation, TMsgDlgButtons() << mbOK, 0);
it = myset.find(15);
found = it!=myset.end();
if(found)
MessageDlg("Found 15", mtInformation, TMsgDlgButtons() << mbOK, 0);
it = myset.find(20);
found = it!=myset.end();
if(found)
MessageDlg("Found 20", mtInformation, TMsgDlgButtons() << mbOK, 0);
Рекомендации:
boolean
должен быть bool
в c ++, также есть set::count()
который будет возвращать 0
или 1
вместо итератора, как find
. Это избавит вас от теста против end()
и вы сможете напрямую использовать его как условие if.
C++11
, не будут вам доступны, включая набор unordered_ (multi).