Я хочу создать так, чтобы я мог проверить, есть ли определенное слово в наборе, используя set :: find
Однако C-строки являются указателями, поэтому набор будет сравнивать их по значениям указателя по умолчанию. Для правильного функционирования необходимо разыменовать их и сравнить строки.
Я мог бы просто передать конструктору указатель на функцию strcmp () в качестве компаратора, но это не совсем то, как я хочу, чтобы он работал. Слово, которое я хотел бы проверить, может быть частью более длинной строки, и я не хочу создавать новую строку из-за проблем с производительностью. Если бы не было набора, я бы использовал strncmp (a1, a2, 3), чтобы проверить первые 3 буквы. На самом деле, 3, вероятно, самое длинное, что может быть, поэтому я согласен с константой третьего аргумента.
Есть ли способ создать набор, который бы сравнивал его элементы, вызывая strncmp ()? Примеры кода будут с благодарностью.
Вот псевдокод того, что я хочу сделать:
bool WordInSet (string, set, length)
{
for (each word in set)
{
if strncmp(string, word, length) == 0
return true;
}
return false;
}
Но я бы предпочел реализовать это, используя стандартные библиотечные функции.