Несколько ключей для одного и того же базового объекта в C ++ - PullRequest
0 голосов
/ 06 сентября 2018

При создании функций виртуальной сети (VNF) я столкнулся с ситуацией, когда мне нужно сохранить объект класса или структуры, к которому может обращаться любой человек из набора действительных ключей , привязанных к этому конкретному объекту. ,

Формально вот требования:

  1. Нам нужно иметь доступ к single-data-blob, используя несколько клавиш. Ключ может быть «пустым» или иметь правильное «имя / значение».
  2. Рассмотрим все ключи, которые будут связаны с данными, которые будут идентифицировать данные. Если все пусто, вставьте данные один раз, получив в качестве входных данных <key1, data>. Если другой key2 подходит для тех же данных, свяжите это key2 с существующим <key1, data>.

Например, если person_data является объектом. Тогда уникальный phone number или уникальный house number можно связать в качестве ключей. Эти ключи могут быть или не быть переменными-членами person-data class / struct. Если они не являются переменными-членами, то, как программист, мы могли бы уже знать соответствующие ключи. Мы должны получить объект person_data с ключом phone number или house number, т.е. нам не нужны все ключи одновременно для извлечения объекта.

Существует ли какая-либо существующая утилита C ++? Кажется, это вполне допустимый вариант использования в целом или, по крайней мере, в NFV (виртуализация сетевых функций).

Спасибо!

1 Ответ

0 голосов
/ 06 сентября 2018

Кажется, что у вас есть определение "ключ" и "данные" в обратном порядке.

Ваш пример показывает, что вы группируете два "ключа" под одним значением "данных". В информатике значение, по которому вы группируете, называется ключом. Ключ, безусловно, может быть связан с двумя значениями данных.

Например, для объекта person_data поля house_number и phone_number будут членами данных. Они, конечно, не были бы ключами; номера домов не уникальны, и не у всех есть номер телефона.

Следовательно, вы можете использовать просто std::vector<person_data>. Если у вас do есть правильный ключ для людей (значение, которое однозначно идентифицирует каждого человека), вы можете отсортировать по этому и иметь std::set<person_data>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...