您的位置:首页 > 编程语言 > C语言/C++

[C/C++]_[Object-C]_[数组排序比较]

2020-05-10 04:09 1316 查看

场景

  1. macOS
    Objective-C
    的数组是如何排序的?

  2. C++
    的数组
    std::vector
    如何排序呢?
    C++
    Objective-C
    的数组排序有什么不同呢?

说明

  1. Objective-C
    的数组排序是以方法的形式来提供的,可以说很方便。而
    C++
    是以算法库来提供的, 不方便, 只能说优点就是效率高和内存利用率高. 因为
    C++
    的数组排序不会创建新数组.

例子

//
//  main.m
//  TestObjc2
//
//  Created by sai on 6/17/17.
//

#import <Foundation/Foundation.h>
#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
#include <string.h>

void TestCppArraySort()
{
NSLog(@"TestCppArraySort");
std::vector<std::string> array;
array.push_back("a");
array.push_back("c");
array.push_back("d");
array.push_back("e");
array.push_back("C");

// macOS: strcasecmp
// Windows: istrcmp
std::sort(array.begin(), array.end(), [](const std::string& obj1,const std::string& obj2)->bool{
return strcasecmp(obj1.c_str(),obj2.c_str()) < 0;
});

for (NSInteger i = 0; i<array.size(); ++i) {
std::cout << array[i] << std::endl;
}

std::cout << strcmp("a","b") << std::endl;
}

void TestObjectiveCArraySort()
{
NSLog(@"TestObjectiveCArraySort");
NSMutableArray* array = [[NSMutableArray new] autorelease];
[array addObject:@"b"];
[array addObject:@"a"];
[array addObject:@"d"];
[array addObject:@"c"];
[array addObject:@"C"];

NSArray* arrayNew = [array sortedArrayUsingComparator:^NSComparisonResult(NSString* obj1, NSString* obj2) {
return [obj1 compare:obj2 options:NSCaseInsensitiveSearch];
}];

for (NSInteger i = 0; i<[arrayNew count]; ++i) {
NSLog(@"%@",[arrayNew objectAtIndex:i]);
}

NSLog(@"%ld",[@"a" compare:@"b"]);
}

int main(int argc, const char * argv[])
{

TestObjectiveCArraySort();
TestCppArraySort();
return 0;
}

输出

2019-09-16 16:06:18.857 TestObjc2[1583:303] TestObjectiveCArraySort
2019-09-16 16:06:18.882 TestObjc2[1583:303] a
2019-09-16 16:06:18.883 TestObjc2[1583:303] b
2019-09-16 16:06:18.883 TestObjc2[1583:303] c
2019-09-16 16:06:18.884 TestObjc2[1583:303] C
2019-09-16 16:06:18.885 TestObjc2[1583:303] d
2019-09-16 16:06:18.885 TestObjc2[1583:303] -1
2019-09-16 16:06:18.886 TestObjc2[1583:303] TestCppArraySort
a
c
C
d
e
-1

参考

case-insensitive-string-comparison-in-c

compare

stl-algorithm-sort

了解本专栏 订阅专栏 解锁全文 infoworld 博客专家 原创文章 347获赞 126访问量 120万+ 关注 他的留言板
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: