Я думаю, вы ищете структуру данных trie , которая оптимизирована для запросов вида "являются ли какие-либо из этих префиксов строк данной строки?" или "является ли данная строка префиксом любой из этих других строк?" (Это связано с детерминированным конечным автоматом, о котором @Sam Varshavchik упоминает в комментарии, хотя для полного понимания этой связи требуется немного теории CS).
Существует много способов реализации дерева в C ++. Я бы посоветовал начать с чтения структуры данных, чтобы лучше понять, как она работает, а затем использовать ее для руководства вашей реализацией. Если в процессе его кодирования вы столкнулись с некоторыми проблемами, не стесняйтесь задавать дополнительный вопрос.