将两个指针转换为 std::pair 的指针,如 struct
Cast two pointers to a pointer of std::pair like struct
我有以下类似于 std::pair
的简单结构。我想将两个指针 keys
和 Values
转换为 pair
的指针。我该怎么做?
谢谢!
K* keys;
V* Values;
/*
length of keys = length of Values
goal: operation(keys, Values) ---> pair*
*/
template <typename K, typename V, K EmptyKey = K(-1)> struct pair {
K first;
V second;
static constexpr auto empty_key = EmptyKey;
bool empty() { return first == empty_key; }
};
您必须将 keys
和 values
复制成对。
template <typename K, typename V>
pair<K, V>* KVToPairs(const K* k, const V* v, unsigned int length) {
if (!k || !v) {
return nullptr;
}
pair<K, V>* pairs = new pair<K, V>[length];
for (unsigned int i = 0; i < length; ++i) {
pairs[i].first = *(k + i);
pairs[i].second = *(v + i);
}
return pairs;
}
见demo
如果您不想要副本。也许你应该改变 pair
的定义,比如
template <typename K, typename V, K EmptyKey = K(-1)> struct pair {
const K* first = nullptr;
const V* second = nullptr;
static constexpr auto empty_key = EmptyKey;
bool empty() { return !first || *first == empty_key; }
};
除pairs
赋值部分外,KVToPairs
功能几乎相同。
见demo
我有以下类似于 std::pair
的简单结构。我想将两个指针 keys
和 Values
转换为 pair
的指针。我该怎么做?
谢谢!
K* keys;
V* Values;
/*
length of keys = length of Values
goal: operation(keys, Values) ---> pair*
*/
template <typename K, typename V, K EmptyKey = K(-1)> struct pair {
K first;
V second;
static constexpr auto empty_key = EmptyKey;
bool empty() { return first == empty_key; }
};
您必须将 keys
和 values
复制成对。
template <typename K, typename V>
pair<K, V>* KVToPairs(const K* k, const V* v, unsigned int length) {
if (!k || !v) {
return nullptr;
}
pair<K, V>* pairs = new pair<K, V>[length];
for (unsigned int i = 0; i < length; ++i) {
pairs[i].first = *(k + i);
pairs[i].second = *(v + i);
}
return pairs;
}
见demo
如果您不想要副本。也许你应该改变 pair
的定义,比如
template <typename K, typename V, K EmptyKey = K(-1)> struct pair {
const K* first = nullptr;
const V* second = nullptr;
static constexpr auto empty_key = EmptyKey;
bool empty() { return !first || *first == empty_key; }
};
除pairs
赋值部分外,KVToPairs
功能几乎相同。
见demo