Нет, вы не можете использовать STL в C (так как STL работает только с C ++ и Objective-C ++). Вы можете имитировать std::pair
с помощью структуры и указателей (поскольку C не поддерживает шаблоны):
struct pair {
void *first;
void *second;
};
void FreePair(struct pair* pair) {
free(pair->first);
free(pair->second);
free(pair);
}
struct pair* MakePair(void *f, void *s, size_t fsize, size_t ssize) {
struct pair* p = malloc(sizeof(struct pair));
if (p == NULL) return NULL;
p->first = malloc(fsize);
p->second = malloc(ssize);
if (p->first == NULL || p->second == NULL) {
FreePair(p);
return NULL;
}
memcpy(p->first, f, fsize);
memcpy(p->second, s, ssize);
return p;
}
int main() {
int a = 42;
const char* str = "Hello";
struct pair* p = MakePair(&a, &str, sizeof(a), sizeof(str));
printf("%d, %s", *(int*)p->first, *(const char**)p->second); // output: "42, Hello"
FreePair(p); // ^^ yes, this pointer pointer is correct
return 0;
}