Как использовать элемент структуры в качестве собственного ключа при вставке структуры в карту, не дублируя ее?
Можно ли вставить структуру в карту, где ключ принадлежит вставляемому значению?
При использовании хеш-карт в C, это то, что я привык делать.
Пример псевдокода:
struct MyStruct {
pub map: BTreeMap<&String, StructThatContainsString>,
// XXX ^ Rust wants lifetime specified here!
}
struct StructThatContainsString {
id: String,
other_data: u32,
}
fn my_fn() {
let ms = MyStruct { map: BTreeMap::new() };
let item = StructThatContainsString {
id: "Some Key".to_string(),
other_data: 0,
}
ms.insert(&item.id, item);
}
Как правильно решить эту ситуацию?
Если это невозможно, можно ли сделать обратное, где значение содержит ссылку на ключ, который будетString
?
Альтернативой может быть использованиеset
вместоmap
, а затем хранить всеstruct
в качестве ключа, но при сравнении используйте только одно из его значений(кажется, это будет работать, но может иметь неприятные последствия, если вы хотите сравнитьstruct
в других контекстах).