Каждая строка должна храниться в экземпляре класса Translator не более одного раза. При нарушении этого ограничения вы получите ошибку «Memory limit exceeded».
class Translator {
public:
void Add(string_view source, string_view target);
string_view TranslateForward(string_view source) const;
string_view TranslateBackward(string_view target) const;
private:
// ...
};
vector<string> data;
map<string_view, string_view> forward;
map<string_view, string_view> backward;
// ...
void Add(string_view source, string_view target) {
// Здесь я создаю копию строки и помещаю в вектор
data.emplace_back(source);
// Далее использую копию для создания string_view
source = data.back();
// тоже самое делаю с target
// ...
forward[source] = target;
backward[target] = source;
}