Dictionary<Tuple<int, int>, link_data> dic_links
我有上面的代码。我使用元组作为字典键。 我只想使用元组中两个值之一来查找值。
有什么方法可以只使用索引而不是在foreach中搜索整个词典吗?
cout << dic_links[new Tuple<int, int>(57,**).data;
答案 0 :(得分:1)
否,不能仅使用部分键在具有O(1)性能的字典中进行搜索。
您的选项是搜索所有键,或者具有单独的字典以将键的每个部分映射到对象(请确保它们保持同步)。
如果您只需要按全键或一个组成部分进行搜索,并且O(log n)是合理的,则可以使用排序列表(您将无法使用单个数组按第二个组成部分进行搜索)。
有关更多想法,您可以搜索“字典范围查询”,在其中您希望找到“所有键为10到100的项”,这是同样的问题。
答案 1 :(得分:1)
不。 Dictionary
设计用于使用严格的键相等性进行有效搜索。如果您不确切知道密钥,那么必须逐一枚举所有元素。
在您的情况下,元组的每个单独属性可能都有重复的值,因此您将无法使用简单的$(document).on('keyup', 'input[type=number][min],input[type=number][max]', function () {
var _this = $(this);
if (_this.val() === "-")
return;
var val = parseFloat(_this.val());
if (_this.attr("min") !== undefined && _this.attr("min") !== "") {
var min = parseFloat(_this.attr('min'));
if (val < min)
_this.val(min);
}
if (_this.attr("max") !== undefined && _this.attr("max") !== "") {
var max = parseFloat(_this.attr('max'));
if (val > max)
_this.val(max);
}
});
$(document).on('change', 'input[type=number][step]', function () {
var _this = $(this);
var val = parseFloat(_this.val());
if (_this.attr("step") !== undefined && _this.attr("step") !== "") {
var step = parseFloat(_this.attr('step'));
if ((val % step) != 0)
_this.val(val - (val % step));
}
});
来按属性进行索引。如果数据是静态的,则可以使用Lookup<int, link_data>
,如果创建索引后需要添加/删除元素,则可以使用Dictionary<int, link_data>
。
答案 2 :(得分:0)
您可以将字典转换为嵌套字典。
Dictionary<int, Dictionary<int, link_data>>dic_links;