Я новичок в Objective-C, и мне нужно манипулировать кодом так же, как в коде C ++.
typedef long long ll;
vector< pair<ll, int> > v;
for(int i = 0; i < N; i++){
v.push_back( make_pair(token[i], N - i));
}
sort(v.begin(), v.end());
Мне нужно использовать тот же код в Objective-C без потери объектно-ориентированного.
Вот я попробовал Objective-C
#import <Foundation/Foundation.h>
typedef long long ll;
@interface Main:NSObject
-(void) main;
@end
@implementation Main
-(void) main{
struct Pair{
ll first;
int second;
};
NSMutableArray *v = [NSMutableArray new];
int N = 3;
NSMutableArray *vector = [NSMutableArray arrayWithCapacity:(int)N];
int i;
for(i=0;i<N;i++){
ll value = (ll)i;
printf("Value is: %lld",(ll)i);
[vector addObject:[NSNumber numberWithLongLong:(value)]];
}
for(int i = 0; i < N; i++){
struct Pair *p = malloc(sizeof(struct Pair));;
ll firstValue = [[vector objectAtIndex:i] longLongValue];
NSLog(@"\nFirst Value is: %lld",firstValue);
p->first = firstValue;
p->second = (int)N - i;
NSLog(@"\n\nAfter append it to P:%lld and Int is: %d \n\n",p->first,p->second);
NSValue *value = [NSValue valueWithBytes:p objCType:@encode(struct Pair)];
[v addObject:value];
}
[v sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
struct Pair *first = (__bridge struct Pair *)obj1;
struct Pair *second = (__bridge struct Pair *)obj2;
NSLog(@"%lld %d",first->first,first->second);
return first->first < second->second;
}];
for(int i = 0; i < N; i++){
//I need to print first and second from V
}
}
@end
int main() {
@autoreleasepool {
Main *main = [[Main alloc]init];
[main main];
}
return 0;
}
Проблема:
Я добился успеха NSLog(@"\n\nAfter append it to P:%lld and Int is: %d \n\n",p->first,p->second);
Но я не могу вернуть то же значениес v
здесь NSLog(@"%lld %d",first->first,first->second);
.
Итак, как мне вставить обратно struct
из v
?
Решает ли этот код C ++ для Objective - C простым способом вместо этого?
Выход для вышеуказанного кода Objective-C:
Значение: 0 Значение: 1 Значение: 2
Первое значение: 0
После добавления к P: 0 и Int: 3 Первое значение: 1
После добавления к P: 1 и Int: 2 Первое значение: 2
Последобавьте его к P: 2 и введите Int: 1
80501841873530129 0
80501841873530129 0